svn commit: r200190 - head/lib/libc/stdlib
Sean Farley
scf at FreeBSD.org
Sun Dec 6 23:05:18 UTC 2009
Author: scf
Date: Sun Dec 6 23:05:17 2009
New Revision: 200190
URL: http://svn.freebsd.org/changeset/base/200190
Log:
Improve the comment within getenv() explaining the search order it takes to
find a variable. Include a note that it must not cause the internal
environment to be generated since malloc() depends upon getenv(). To call
malloc() would create a circular dependency.
Recommended by: green
Approved by: jilles
MFC after: 1 week
Modified:
head/lib/libc/stdlib/getenv.c
Modified: head/lib/libc/stdlib/getenv.c
==============================================================================
--- head/lib/libc/stdlib/getenv.c Sun Dec 6 22:14:58 2009 (r200189)
+++ head/lib/libc/stdlib/getenv.c Sun Dec 6 23:05:17 2009 (r200190)
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2007-2008 Sean C. Farley <scf at FreeBSD.org>
+ * Copyright (c) 2007-2009 Sean C. Farley <scf at 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 nameL
/*
* 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);
More information about the svn-src-all
mailing list