#include <dlfcn.h>
#include <math.h>
-
+#include "sysdep.h"
#include "effi.h"
#include "buffer.h"
# define SIGNAL_ERROR signal_error
# define FFIBYTE Bufbyte
# define WRITE_C_STRING(x,y) write_c_string((x),(y))
+# define WRITE_FMT_STRING(x,y,...) write_fmt_string((x),(y),__VA_ARGS__)
# define LRECORD_DESCRIPTION lrecord_description
#else
# define SIGNAL_ERROR Fsignal
# define FFIBYTE Ibyte
# define WRITE_C_STRING(x,y) write_c_string((y),(x))
+# define WRITE_FMT_STRING(x,y,...) \
+ do { \
+ char wcsb[128]; \
+ int wcss = snprintf(wcsb, sizeof(wcsb), \
+ (y),__VA_ARGS__); \
+ write_c_string((y),wcsb); \
+ } while(0)
# define LRECORD_DESCRIPTION memory_description
#endif /* SXEMACS */
{
/* This function can GC */
Lisp_EffiObject *ffio = XEFFIO(obj);
- char buf[256];
-
escapeflag = escapeflag; /* shutup compiler */
if (print_readably) {
#ifdef SXEMACS
print_internal(ffio->type, printcharfun, 1);
WRITE_C_STRING(" ", printcharfun);
}
- snprintf(buf, 255, "size=%ld fotype=%d foptr=%p>",
- (long)XINT(ffio->size), ffio->fotype, ffio->fop.generic);
- WRITE_C_STRING(buf, printcharfun);
+ WRITE_FMT_STRING(printcharfun,"size=%ld fotype=%d foptr=%p>",
+ (long)XINT(ffio->size), ffio->fotype, ffio->fop.generic);
}
static const struct LRECORD_DESCRIPTION ffiobject_description[] = {
/* Add an extension if we need to */
dotpos = strrchr((char *)XSTRING_DATA(libname),'.');
if ( dotpos == NULL || strncmp(dotpos, EXT, sizeof(EXT))) {
- soname = xmalloc(XSTRING_LENGTH(libname) + sizeof(EXT) + 1);
- strcpy(soname, (char *)XSTRING_DATA(libname));
- strcat(soname, EXT);
+ ssize_t liblen = XSTRING_LENGTH(libname);
+ ssize_t soname_len = liblen + sizeof(EXT);
+ soname = xmalloc( soname_len + 1);
+ strncpy(soname, (char *)XSTRING_DATA(libname), liblen+1);
+ strncat(soname, EXT, sizeof(EXT)+1);
}
if ( soname == NULL ) {
Lisp_Object Qffi_jobp;
#define EFFI_DEBUG_JOB(args...)
static Lisp_Object
-exec_sentinel_unwind(Lisp_Object UNUSED(datum))
+exec_sentinel_unwind(Lisp_Object SXE_UNUSED(datum))
{
return Qnil;
}
print_ffi_job(worker_job_t job, Lisp_Object pcf)
{
ffi_job_t ffij = ffi_job(job);
- char *str = alloca(64);
SXE_MUTEX_LOCK(&ffij->mtx);
- WRITE_C_STRING(" carrying ", pcf);
- snprintf(str, 63, " #<ffi-job 0x%lx>", (long unsigned int)ffij);
- WRITE_C_STRING(str, pcf);
+ WRITE_FMT_STRING(pcf, " carrying #<ffi-job 0x%lx>",
+ (long unsigned int)ffij);
SXE_MUTEX_UNLOCK(&ffij->mtx);
return;
}