Date: Sun, 6 Dec 2009 23:05:18 +0000 (UTC) From: Sean Farley <scf@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r200190 - head/lib/libc/stdlib Message-ID: <200912062305.nB6N5I2S034464@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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@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 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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912062305.nB6N5I2S034464>