Date: Sun, 6 Apr 2008 17:54:44 -0700 From: Jeremy Chadwick <koitsu@freebsd.org> To: Doug Hardie <bc979@lafn.org> Cc: freebsd-stable@freebsd.org Subject: Re: getenv in FreeBSD 7 Message-ID: <20080407005444.GB77472@eos.sc1.parodius.com> In-Reply-To: <C5E057AC-1533-4EE8-B678-339B7EC97FA6@lafn.org> References: <1794897B-7A36-412A-8849-87F10268EBAE@lafn.org> <20080406214524.GA72199@eos.sc1.parodius.com> <20080406215237.GA72336@eos.sc1.parodius.com> <C5E057AC-1533-4EE8-B678-339B7EC97FA6@lafn.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Apr 06, 2008 at 03:05:18PM -0700, Doug Hardie wrote: > > On Apr 6, 2008, at 14:52, Jeremy Chadwick wrote: >> On Sun, Apr 06, 2008 at 02:45:24PM -0700, Jeremy Chadwick wrote: >>> On Sun, Apr 06, 2008 at 02:37:06PM -0700, Doug Hardie wrote: >>>> Somewhere between FreeBSD 6.2 and 7.0 getenv has been changed to return >>>> a >>>> null if an environment variable is set but has no value. I don't find >>>> anything anywhere in the documentation/man pages on this. As a result, >>>> you >>>> cannot distinguish between a variable that is not set and one that is >>>> set >>>> to a value of "". Is this a bug or a feature change? >>> >>> I'd begin peeking here: >>> >>> http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdlib/getenv.c >> >> Follow-up: the manpages between 6.3-PRERELEASE and 7.0-STABLE do >> document said change: >> >> http://www.freebsd.org/cgi/man.cgi?query=getenv&apropos=0&sektion=3&manpath=FreeBSD+6.3-RELEASE&format=html > > Says that if the environment variable is NOT IN THE ENVIRONMENT then null > is returned. Setting the variable to "" does put it in the environment. > env returns it properly. > >> >> >> http://www.freebsd.org/cgi/man.cgi?query=getenv&apropos=0&sektion=3&manpath=FreeBSD+7.0-stable&format=html > > Same thing. I find nothing documented about this change. I'm not sure where you're going with this. I see it clearly in the ERRORS section. But besides that, just like Bakul Shah, I cannot reproduce this problem: $ uname -mr 7.0-STABLE amd64 $ gcc -o z z.c $ ./z getenv(FOO) = (null) $ export FOO=yep $ ./z getenv(FOO) = yep export FOO= $ ./z getenv(FOO) = $ cat z.c #include <stdio.h> #include <stdlib.h> int main(void) { char *e = getenv("FOO"); printf("getenv(FOO) = %s\n", e); return 0; } Finally, why did you take freebsd-stable off this mail conversation? If others have the same question in the future, they're not going to be able to read what partook here. I'm re-adding the list. -- | Jeremy Chadwick jdc at parodius.com | | Parodius Networking http://www.parodius.com/ | | UNIX Systems Administrator Mountain View, CA, USA | | Making life hard for others since 1977. PGP: 4BD6C0CB |
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080407005444.GB77472>