It is not legal to re-use a va_list variable. This caused

a crash on amd64, in particular.

Thanks to: Sean McNeil
This commit is contained in:
Tim Kientzle 2004-08-26 03:33:53 +00:00
parent 1db81dc074
commit c85db499ac

View file

@ -47,19 +47,22 @@ __archive_string_vsprintf(struct archive_string *as, const char *fmt,
va_list ap)
{
size_t l;
va_list ap1;
if (fmt == NULL) {
as->s[0] = 0;
return;
}
va_copy(ap1, ap);
l = vsnprintf(as->s, as->buffer_length, fmt, ap);
/* If output is bigger than the buffer, resize and try again. */
if (l+1 >= as->buffer_length) {
__archive_string_ensure(as, l + 1);
l = vsnprintf(as->s, as->buffer_length, fmt, ap);
l = vsnprintf(as->s, as->buffer_length, fmt, ap1);
}
as->length = l;
va_end(ap1);
}
/*