Commit 05a7af68 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

vasprintf: rewrite. va_copy() was missing.

parent f480cd0d
...@@ -25,13 +25,34 @@ ...@@ -25,13 +25,34 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <assert.h>
int vasprintf (char **strp, const char *fmt, va_list ap) int vasprintf (char **strp, const char *fmt, va_list ap)
{ {
ssize_t len = vsnprintf (NULL, 0, fmt, ap) + 1; va_list args;
char *res = malloc (len); int len;
if (res == NULL)
return -1; va_copy (args, ap);
*strp = res; len = vsnprintf (NULL, 0, fmt, args);
return vsnprintf (res, len, fmt, ap); va_end (args);
char *str = malloc (len + 1);
if (str != NULL)
{
int len2;
va_copy (args, ap);
len2 = vsprintf (str, fmt, args);
assert (len2 == len);
va_end (args);
}
else
{
len = -1;
#ifndef NDEBUG
str = (void *)(intptr_t)0x41414141; /* poison */
#endif
}
*strp = str;
return len;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment