Thread (14 messages) flat view 14 messages, 7 authors, 2016-06-15

Re: [PATCH/RFC 4/4] Add interactive mode to git-shell for user-friendliness

From: Thomas Rast <hidden>
Date: 2016-06-15 22:49:08

[Please don't trim the Cc list without good reason.]

Bernhard R. Link wrote:
* Kevin P. Fleming [off-list ref] [100714 15:59]:
quoted
On 07/14/2010 04:04 AM, Ævar Arnfjörð Bjarmason wrote:
quoted
On Wed, Jul 14, 2010 at 03:01, Greg Brockman [off-list ref] wrote:
quoted
+               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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help