1 #include <stdarg.h> 2 #include <stddef.h> 3 4 typedef struct FILE FILE; 5 6 // TODO: Can be implemented in rust when cbindgen supports "..." syntax 7 8 int vasprintf(char ** strp, const char * fmt, va_list ap); 9 10 int asprintf(char ** strp, const char * fmt, ...) { 11 int ret; 12 va_list ap; 13 va_start(ap, fmt); 14 ret = vasprintf(strp, fmt, ap); 15 va_end(ap); 16 return ret; 17 } 18 19 int vfprintf(FILE * stream, const char * fmt, va_list ap); 20 21 int fprintf(FILE * stream, const char * fmt, ...) { 22 int ret; 23 va_list ap; 24 va_start(ap, fmt); 25 ret = vfprintf(stream, fmt, ap); 26 va_end(ap); 27 return ret; 28 } 29 30 int vprintf(const char * fmt, va_list ap); 31 32 int printf(const char * fmt, ...) { 33 int ret; 34 va_list ap; 35 va_start(ap, fmt); 36 ret = vprintf(fmt, ap); 37 va_end(ap); 38 return ret; 39 } 40 41 int vsnprintf(char * s, size_t n, const char * fmt, va_list ap); 42 43 int snprintf(char * s, size_t n, const char * fmt, ...) { 44 int ret; 45 va_list ap; 46 va_start(ap, fmt); 47 ret = vsnprintf(s, n, fmt, ap); 48 va_end(ap); 49 return ret; 50 } 51 52 int vsprintf(char * s, const char * fmt, va_list ap); 53 54 int sprintf(char *s, const char * fmt, ...) { 55 int ret; 56 va_list ap; 57 va_start(ap, fmt); 58 ret = vsprintf(s, fmt, ap); 59 va_end(ap); 60 return ret; 61 } 62 63 int vfscanf(FILE * stream, const char * fmt, va_list ap); 64 65 int fscanf(FILE * stream, const char * fmt, ...) { 66 int ret; 67 va_list ap; 68 va_start(ap, fmt); 69 ret = vfscanf(stream, fmt, ap); 70 va_end(ap); 71 return ret; 72 } 73 74 int vscanf(const char * fmt, va_list ap); 75 76 int scanf(const char * fmt, ...) { 77 int ret; 78 va_list ap; 79 va_start(ap, fmt); 80 ret = vscanf(fmt, ap); 81 va_end(ap); 82 return ret; 83 } 84 85 int vsscanf(const char * input, const char * fmt, va_list ap); 86 87 int sscanf(const char * input, const char * fmt, ...) { 88 int ret; 89 va_list ap; 90 va_start(ap, fmt); 91 ret = vsscanf(input, fmt, ap); 92 va_end(ap); 93 return ret; 94 } 95