Skip site navigation (1)Skip section navigation (2)
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>