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