Hi Thomas!
On Wed, Oct 16, 2024 at 01:14:51PM +0200, Thomas Weißschuh wrote:
The environ pointer itself is never NULL, this is guaranteed by crt.h. However if the environment is empty, environ will point to a NULL pointer.
Good point, however from what I'm seeing on glibc, if the user sets environ to NULL, getenv() safely reports NULL and doesn't crash. I don't know what the spec says about environ being NULL, though. I just tested on freebsd to compare and also get a NULL in this case as well. So I'd be tempted by keeping the check.
int idx, i;
- if (environ) {
- if (*environ) { for (idx = 0; environ[idx]; idx++) { for (i = 0; name[i] && name[i] == environ[idx][i];) i++;
However as a quick note, if we decide we don't care about environ being NULL, and since this is essentially a cleanup, why not even get rid of the whole "if" condition, since the loop takes care of it ?
FWIW I tested glibc with this:
#include <stdlib.h>
int main(int argc, char **argv) { extern char **environ;
environ=NULL; return getenv("HOME") == NULL; }
Cheers, Willy