version 1.1, 2015/03/19 14:57:29 |
version 1.3, 2015/10/06 18:32:19 |
|
|
vasprintf(char **ret, const char *format, va_list ap) |
vasprintf(char **ret, const char *format, va_list ap) |
{ |
{ |
char buf[2]; |
char buf[2]; |
|
va_list ap2; |
int sz; |
int sz; |
|
|
if ((sz = vsnprintf(buf, sizeof(buf), format, ap)) != -1 && |
va_copy(ap2, ap); |
(*ret = malloc(sz + 1)) != NULL) { |
sz = vsnprintf(buf, sizeof(buf), format, ap2); |
|
va_end(ap2); |
|
|
|
if (sz != -1 && (*ret = malloc(sz + 1)) != NULL) { |
if (vsnprintf(*ret, sz + 1, format, ap) == sz) |
if (vsnprintf(*ret, sz + 1, format, ap) == sz) |
return(sz); |
return sz; |
free(*ret); |
free(*ret); |
} |
} |
*ret = NULL; |
*ret = NULL; |
return(-1); |
return -1; |
} |
} |
|
|
#endif |
#endif |