1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdarg.h> 4 5 #ifndef HAVE_VASPRINTF 6 /* Workaround for the lack of vasprintf() 7 * As found on: http://unixpapa.com/incnote/stdio.html 8 * Seems to be Public Domain 9 */ 10 int vasprintf(char ** ret,const char * format,va_list ap)11vasprintf(char **ret, const char *format, va_list ap) 12 { 13 va_list ap2; 14 int len = 100; /* First guess at the size */ 15 if ((*ret = (char *) malloc(len)) == NULL) 16 { 17 return -1; 18 } 19 while (1) 20 { 21 int nchar; 22 va_copy(ap2, ap); 23 nchar= vsnprintf(*ret, len, format, ap2); 24 if (nchar > -1 && nchar < len) 25 { 26 return nchar; 27 } 28 if (nchar > len) 29 { 30 len= nchar+1; 31 } else 32 { 33 len*= 2; 34 } 35 if ((*ret = (char *) realloc(*ret, len)) == NULL) 36 { 37 free(*ret); 38 return -1; 39 } 40 } 41 } 42 #endif 43 44