1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
#include <ffi_platypus.h>
#ifdef FFI_PL_PROBE_VARIADIC
#include <stdio.h>
#include <stdarg.h>
#include "libtest.h"
EXTERN int
variadic_return_arg(int which, ...)
{
va_list ap;
int i, val;
va_start(ap, which);
for(i=0; i<which; i++)
{
val = va_arg(ap, int);
}
va_end(ap);
return val;
}
EXTERN const char *
xprintf(const char *fmt, ...)
{
va_list ap;
static char buffer[2046];
char *bp=buffer;
va_start(ap, fmt);
while(*fmt != '\0')
{
switch(*fmt)
{
case '%':
{
char buffer2[64];
const char *str=buffer2;
switch(*(++fmt))
{
case 'd':
sprintf(buffer2, "%d", va_arg(ap, int));
break;
case 's':
str = va_arg(ap, char *);
break;
default:
str = "[fmt error]";
break;
}
strcpy(bp, str);
bp += strlen(str);
}
break;
default:
*(bp++) = *fmt;
break;
}
fmt++;
}
va_end(ap);
*bp = '\0';
return buffer;
}
#endif
|