X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com X-Authenticated: #27081556 X-Provags-ID: V01U2FsdGVkX1+Bm4YbamyBzyGEsT3/+joDlPYvbzb3hd5YgQx3FT dVP2oMRJSE/yWr Message-ID: <50D50440.6020308@gmx.de> Date: Sat, 22 Dec 2012 01:52:16 +0100 From: Juan Manuel Guerrero User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121025 Thunderbird/16.0.2 MIME-Version: 1.0 To: djgpp AT delorie DOT com Subject: Re: Question about va_* macros References: <50D48246 DOT 7010706 AT gmx DOT de> <201212211842 DOT qBLIg6qp028482 AT envy DOT delorie DOT com> In-Reply-To: <201212211842.qBLIg6qp028482@envy.delorie.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 Reply-To: djgpp AT delorie DOT com Am 21.12.2012 19:42, schrieb DJ Delorie: > You can't rely on a NULL at the end of a va_list. > > I have seen *many* bugs where a missing explicit NULL in a va call > caused problems because there was no terminator. Disapointing. The reason why I have asked this is because according to C99 or POSIX printf and scanf family of functions shall return EINVAL if there are insufficient arguments. This makes it necessary to be able to detect how many arguments are in va_list. I have single stepped through the _doscan() code inspecting the content of va_list and the list was always terminated with a NULL pointer. I only checked this with gcc472b. Because I have seen no djgpp specific code that added the list terminator I have assumed that this was done by gcc and that it could be taken for granted that the list will always be terminated this way. I will will look at glibc and cygwin to see how they handle this issue. Regards, Juan M. Guerrero