ret = mp_alloc(p, 1);
free = p->last - p->free;
}
- int cnt = vsnprintf(ret, free, fmt, args);
+ va_list args2;
+ va_copy(args2, args);
+ int cnt = vsnprintf(ret, free, fmt, args2);
+ va_end(args2);
if (cnt < 0)
{
/* Our C library doesn't support C99 return value of vsnprintf, so we need to iterate */
{
len *= 2;
buf = alloca(len);
- cnt = vsnprintf(buf, len, fmt, args);
+ va_copy(args2, args);
+ cnt = vsnprintf(buf, len, fmt, args2);
+ va_end(args2);
}
while (cnt < 0);
ret = mp_alloc(p, cnt+1);
else
{
ret = mp_alloc(p, cnt+1);
- int cnt2 = vsnprintf(ret, cnt+1, fmt, args);
+ va_copy(args2, args);
+ int cnt2 = vsnprintf(ret, cnt+1, fmt, args2);
+ va_end(args2);
ASSERT(cnt2 == cnt);
}
return ret;
int main(void)
{
struct mempool *mp = mp_new(64);
- char *x = mp_printf(mp, "Hello, %s!\n", "World");
+ char *x = mp_printf(mp, "<Hello, %s!>", "World");
fputs(x, stdout);
- x = mp_printf(mp, "Hello, %100s!\n", "World");
+ x = mp_printf(mp, "<Hello, %50s!>\n", "World");
fputs(x, stdout);
return 0;
}