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