Re: [PATCH/RFC 4/4] Add interactive mode to git-shell for user-friendliness
- From
Thomas Rast <trast@student.ethz.ch>
- Date
- Jul 14, 2010, 15:40 UTC
- Message-ID
- <201007141740.37867.trast@student.ethz.ch>
- In-Reply-To
- <20100714152444.GA26674@pcpool00.mathematik.uni-freiburg.de>
[Please don't trim the Cc list without good reason.]
Bernhard R. Link wrote:
Show 17 quoted lines
> * Kevin P. Fleming <kpfleming@digium.com> [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@mit.edu> 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