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)6 int 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