#define _GNU_SOURCE #include #include #include int vasprintf(char **s, const char *fmt, va_list ap) { size_t l; *s = 0; FILE *f = open_memstream(s, &l); if (!f) return -1; if ((l = vfprintf(f, fmt, ap)) == -1) { free(*s); *s = 0; } fclose(f); return l; }