1 /* 2 * vasprintf.c 3 */ 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <stdarg.h> 8 9 int vasprintf(char **bufp, const char *format, va_list ap) 10 { 11 va_list ap1; 12 int bytes; 13 char *p; 14 15 va_copy(ap1, ap); 16 17 bytes = vsnprintf(NULL, 0, format, ap1) + 1; 18 va_end(ap1); 19 20 *bufp = p = malloc(bytes); 21 if (!p) 22 return -1; 23 24 return vsnprintf(p, bytes, format, ap); 25 } 26