1 #define _GNU_SOURCE 2 #include <stdio.h> 3 #include <stdarg.h> 4 #include <stdlib.h> 5 vasprintf(char ** s,const char * fmt,va_list ap)6int vasprintf(char **s, const char *fmt, va_list ap) 7 { 8 va_list ap2; 9 va_copy(ap2, ap); 10 int l = vsnprintf(0, 0, fmt, ap2); 11 va_end(ap2); 12 13 if (l<0 || !(*s=malloc(l+1U))) return -1; 14 return vsnprintf(*s, l+1U, fmt, ap); 15 } 16