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 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <assert.h>
int vasprintf (char **strp, const char *fmt, va_list ap)
{
ssize_t len = vsnprintf (NULL, 0, fmt, ap) + 1;
char *res = malloc (len);
if (res == NULL)
return -1;
*strp = res;
return vsnprintf (res, len, fmt, ap);
va_list args;
int len;
va_copy (args, ap);
len = vsnprintf (NULL, 0, fmt, args);
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