vasprintf.c raw

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