diff options
author | Sean Farley <scf@FreeBSD.org> | 2009-12-06 23:05:17 +0000 |
---|---|---|
committer | Sean Farley <scf@FreeBSD.org> | 2009-12-06 23:05:17 +0000 |
commit | 6da7f71cd4a64231b4fa027614553f491c14e1e2 (patch) | |
tree | a21576d6c38bebc62580d8e3d4f2fc2891d4bed3 | |
parent | 04b0c5bbfa561a36748c937e0dc90f821ccac4e5 (diff) |
Notes
-rw-r--r-- | lib/libc/stdlib/getenv.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/libc/stdlib/getenv.c b/lib/libc/stdlib/getenv.c index 2abf7fc7b01ee..b7826d72a5d4e 100644 --- a/lib/libc/stdlib/getenv.c +++ b/lib/libc/stdlib/getenv.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2007-2008 Sean C. Farley <scf@FreeBSD.org> + * Copyright (c) 2007-2009 Sean C. Farley <scf@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -160,7 +160,7 @@ __findenv(const char *name, size_t nameLen, int *envNdx, bool onlyActive) /* * Find environment variable from end of array (more likely to be - * active). A variable created by putenv is always active or it is not + * active). A variable created by putenv is always active, or it is not * tracked in the array. */ for (ndx = *envNdx; ndx >= 0; ndx--) @@ -426,13 +426,14 @@ getenv(const char *name) } /* - * An empty environment (environ or its first value) regardless if - * environ has been copied before will return a NULL. + * Variable search order: + * 1. Check for an empty environ. This allows an application to clear + * the environment. + * 2. Search the external environ array. + * 3. Search the internal environment. * - * If the environment is not empty, find an environment variable via - * environ if environ has not been copied via an *env() call or been - * replaced by a running program, otherwise, use the rebuilt - * environment. + * Since malloc() depends upon getenv(), getenv() must never cause the + * internal environment storage to be generated. */ if (environ == NULL || environ[0] == NULL) return (NULL); |