1#define _GNU_SOURCE 2#include <stdio.h> 3#include <stdarg.h> 4#include <stdlib.h> 5 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