Bruno Haible wrote: >> perhaps incomplete, since you can make the same argument about the "envp" >> pointer. > > How so?
>From the perspective that since POSIX disallows passing a NULL pointer, it would make sense to label each corresponding parameter with the nonnull attribute. Not a big deal, though, since we're just trying to avoid abuse. > When the caller passes a NULL envp argument - which POSIX does not > allow - the kernel provides an empty environment array instead. The callee > never sees a NULL 'environ'. > > POSIX refers to argv[0], but not to envp[0]. The POSIX spec for execve says this about envp: The argument envp is an array of character pointers to null-terminated strings. These strings shall constitute the environment for the new process image. The envp array is terminated by a null pointer. which I seem to recall means (probably due to the definition of "array of strings") that it must be non-NULL. > It also contains language that explicitly says the callee is not guaranteed > to be > invoked with a POSIX compliant 'environ': > "The new process might be invoked in a non-conforming environment if the > envp array does not contain implementation-defined variables required > by the implementation to provide a conforming environment. See the > _CS_V7_ENV entry in <unistd.h> and confstr() for details."