[Please don't trim the Cc list without good reason.] Bernhard R. Link wrote: > * Kevin P. Fleming <kpfleming@xxxxxxxxxx> [100714 15:59]: > > On 07/14/2010 04:04 AM, Ævar Arnfjörð Bjarmason wrote: > > > On Wed, Jul 14, 2010 at 03:01, Greg Brockman <gdb@xxxxxxx> wrote: > > >> + execl(prog, prog, (char *) NULL); > > > > > > Why the casting of NULL? It's not done in the builtin/help.c code. > > > > > > Anyway, if it was cast it should be to (const char *), shouldn't it? > > > > When a NULL sentinel is passed to a varargs function that only > > understands 'char *' arguments, the NULL must be cast specifically, > > otherwise it will appear in the varargs array as an int or a long. > > To be more specific: If NULL is (void *)0 then it does not need to be > cast. Sadly the standard allows to define it as 0, and so it is on > some systems. So to be portable it needs to be cast to be a pointer, > otherwise the varargs argument is assumed to be an int. Worse, the pointer representations need not be the same between types, even though that is a fairly exotic idea: http://c-faq.com/null/machexamp.html So it seems execl() must always have an explicitly-cast (char*)NULL sentinel. -- Thomas Rast trast@{inf,student}.ethz.ch -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html