/* * asprintf.c */ #include #include #include int asprintf(char **bufp, const char *format, ...) { va_list ap, ap1; int rv; int bytes; char *p; va_start(ap, format); va_copy(ap1, ap); bytes = vsnprintf(NULL, 0, format, ap1) + 1; va_end(ap1); *bufp = p = malloc(bytes); if (!p) return -1; rv = vsnprintf(p, bytes, format, ap); va_end(ap); return rv; }