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: Kevin P. Fleming <hidden>
Date: 2016-06-15 22:49:07

On 07/14/2010 04:04 AM, Ævar Arnfjörð Bjarmason wrote:
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.
execl() is an example of a varargs function that only uses varargs
functionality to accept a variable *number* of arguments, it does not
allow for arguments of differing types, so it does not check the types
of its arguments at all. On any platform where an int and a pointer are
not the same size, this can cause a serious problem. When we came across
this problem in Asterisk, we added a macro called SENTINEL (that just
expands to the proper type for the target platform) that is used in
these cases, so that it is clear to the reader of the code what is going on.

-- 
Kevin P. Fleming
Digium, Inc. | Director of Software Technologies
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
skype: kpfleming | jabber: kfleming@digium.com
Check us out at www.digium.com & www.asterisk.org
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help