Re: [PATCH] Use explicit pointers for execl...() sentinels.
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