Re: [PATCH] Add compat/vsnprintf.c for systems that returns -1 on maxsize reached
- From
Johannes Sixt <j.sixt@viscovery.net>
- Date
- Mar 4, 2008, 16:19 UTC
- Message-ID
- <47CD7686.9040501@viscovery.net>
- In-Reply-To
- <20080304140930.GA23335@pvv.org>
Finn Arne Gangstad schrieb:
Show 14 quoted lines
> On Tue, Mar 04, 2008 at 02:59:28PM +0100, Michal Rokos wrote:
>
>> + while ( ret == -1 )
>> + {
>> + maxsize = (maxsize*3)/2;
>> + s = realloc(s, maxsize);
>> + if (! s) return -1;
>> + ret = vsnprintf(s, maxsize, format, ap); /* <--- UNSAFE! */
>> + }
>
> This is not generally safe, you cannot call vsnprintf multiple times
> with the same ap on all architectures. You need va_copy (or __va_copy,
> or VA_COPY, differs a bit between different architectures, especially
> one the ones with a broken vsnprintf I guess..)True. But...
This replacement of vsnprintf will not be needed on all architectures, but only on some. And on these we can test in advance whether we can get away without va_copy (et.al.). A note next to the configuration setting about this would be in order, I think.
Furthermore, on systems where vsnprintf is broken in this way, va_copy is likely not available.
-- Hannes