git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Use explicit pointers for execl...() sentinels.

From
Horst von Brand <vonbrand@inf.utfsm.cl>
Date
Mar 13, 2006, 04:12 UTC
Message-ID
<200603130412.k2D4CW1b011631@laptop11.inf.utfsm.cl>
In-Reply-To
<peff@peff.net>
Jeff King <peff@peff.net> wrote:
Show 5 quoted lines
> On Sun, Mar 12, 2006 at 08:08:12PM +0200, Timo Hirvonen wrote:
> > NULL pointer does not point to any data, it just says it's 'empty'.  So
> > it doesn't need to be same type pointer as specified in the function
> > prototype.  Pointers are just addresses, it doesn't matter from to code
> > generation point of view whether it is (char *)0 or (void *)0.
Show 6 quoted lines
> Sorry, but I think you're wrong according to the C standard. Pointers of 
> different types do NOT have to share the same representation (e.g.,
> there have been some platforms where char* and int* were different
> sizes). A void pointer must be capable of representing any type of
> pointer (for example, holding the largest possible type). However, if
> sizeof(void *) == 8 and sizeof(char *) == 4,

Very improbable, they'll be the same normally ("void *" is a way of getting rid of the overloading of the meaning of "char *" for this before ANSI C). Sure, sizeof(int *) might be 4, but I think that is pretty far off.

>                                              you have a problem with
> variadic functions which are expecting to pull 4 byte off the stack. 

There are special rules for variadic functions, probably pointers would be cast to/from void * in such a case by the compiler.

> In a non-variadic function, the compiler would do the right implicit
> casting. In a variadic function, it can't. 
It sure can. The rules where defined so that it works.
> The real question is, does git want to care about portability to such
> platforms.

Broken platform, on which the compiler fails miserably in doing its job? No, it doesn't.

> If you remain unconvinced, I can try to find chapter and verse of the
> standard.
Please do.
> > sizeof(unsigned long) is sizeof(void *) in real world.
> Are you saying that because it encompasses all of the platforms you've
> worked on, or do you have some evidence that it is largely the case? It
> certainly isn't guaranteed by the C standard.

More because a machine with pointers that are much larger than the largest "normal" integer would be pretty weird (sure, on intel 8086 they where 32 ("far" pointer, segment + offset) and 16 bits, but...

-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513
Next: Jeff King
Message 1 of 5 in “Re: [PATCH] Use explicit pointers for execl...() sentinels.”
  1. Horst von BrandMar 13, 2006
  2. [OT] Re: [PATCH] Use explicit pointers for execl...() sentinels.Jeff King, Mar 14, 2006
  3. Horst von BrandMar 13, 2006
  4. Linus TorvaldsMar 13, 2006
  5. Horst H. von BrandDec 5, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.