From owner-svn-src-head@FreeBSD.ORG Tue Dec 1 17:24:32 2009 Return-Path: Delivered-To: svn-src-head@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 678C31065679; Tue, 1 Dec 2009 17:24:32 +0000 (UTC) (envelope-from green@green.homeunix.org) Received: from green.homeunix.org (green.homeunix.org [66.92.150.152]) by mx1.freebsd.org (Postfix) with ESMTP id EBFF38FC20; Tue, 1 Dec 2009 17:24:31 +0000 (UTC) Received: from green.homeunix.org (green@localhost [127.0.0.1]) by green.homeunix.org (8.14.3/8.14.1) with ESMTP id nB1HOUVc044402; Tue, 1 Dec 2009 12:24:30 -0500 (EST) (envelope-from green@green.homeunix.org) Received: (from green@localhost) by green.homeunix.org (8.14.3/8.14.3/Submit) id nB1HOUQ9044401; Tue, 1 Dec 2009 12:24:30 -0500 (EST) (envelope-from green) Date: Tue, 1 Dec 2009 12:24:30 -0500 From: Brian Fundakowski Feldman To: "Sean C. Farley" Message-ID: <20091201172430.GD35660@green.homeunix.org> References: <200912010504.nB154VnS053167@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r199983 - in head: lib/libc/stdlib tools/regression/environ X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Dec 2009 17:24:32 -0000 On Tue, Dec 01, 2009 at 10:01:59AM -0600, Sean C. Farley wrote: > On Tue, 1 Dec 2009, Brian Feldman wrote: > >> I also fixed another inconsistency in getenv(3) where updating the >> global environ pointer would not be reflected in the return values. >> It would have taken an intermediary setenv(3)/putenv(3)/unsetenv(3) >> in order to see the change. > > In the current code, if environ is replaced or none of the set/put/unset > calls have been made, getenv() will use __findenv_environ() (searches > environ directly) to find the entry. This is necessary since malloc() > depends upon getenv() creating a cross-dependency. Could you replace the (quoted) comment wholesale with something to that effect? >> @@ -426,22 +439,18 @@ getenv(const char *name) >> } >> >> /* >> - * An empty environment (environ or its first value) regardless if >> - * environ has been copied before will return a NULL. >> - * >> - * 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. >> + * If we have not already allocated memory by performing >> + * write operations on the environment, avoid doing so now. >> */ >> - if (environ == NULL || environ[0] == NULL) >> - return (NULL); >> - else if (envVars == NULL || environ != intEnviron) >> + if (envVars == NULL) >> return (__findenv_environ(name, nameLen)); >> - else { >> - envNdx = envVarsTotal - 1; >> - return (__findenv(name, nameLen, &envNdx, true)); >> - } >> + >> + /* Synchronize environment. */ >> + if (__merge_environ() == -1) >> + return (NULL); >> + >> + envNdx = envVarsTotal - 1; >> + return (__findenv(name, nameLen, &envNdx, true)); >> } -- Brian Fundakowski Feldman \'[ FreeBSD ]''''''''''\ <> green@FreeBSD.org \ The Power to Serve! \ Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\