From 0d8dfb2b905c374a65c2ca245bf588444aec5fff Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Fri, 15 Jun 2007 15:16:46 -0400 Subject: Vladimir Oleynik pointed out that va_start() twice in the same function isn't portable (with ppc 4xx as an example of a platform it doesn't work on). This is why va_copy exists. --- lib/lib.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/lib.c b/lib/lib.c index 8430ae68..4e0ef73f 100644 --- a/lib/lib.c +++ b/lib/lib.c @@ -126,22 +126,22 @@ void *xstrdup(char *s) // Die unless we can allocate enough space to sprintf() into. char *xmsprintf(char *format, ...) { - va_list va; + va_list va, va2; int len; char *ret; - // How long is it? - va_start(va, format); + va_copy(va2, va); + + // How long is it? len = vsnprintf(0, 0, format, va); len++; va_end(va); // Allocate and do the sprintf() ret = xmalloc(len); - va_start(va, format); - vsnprintf(ret, len, format, va); - va_end(va); + vsnprintf(ret, len, format, va2); + va_end(va2); return ret; } -- cgit v1.2.3