getenv in FreeBSD 7

Doug Hardie bc979 at lafn.org
Mon Apr 7 03:18:21 UTC 2008


On Apr 6, 2008, at 17:54, Jeremy Chadwick wrote:
> 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.

I didn't think that having a defined variable with the value "" would  
be an error.  getenv does not return EINVAL but returns a zero.  I  
would have expected some notification in the description of getenv.

>
>
> 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;
> }

At this time, it does return a pointer to "".  However, earlier today  
it did not.  It returned a zero.  It was quite consistent for several  
hours.  I wonder if this is another issue with gdb.  It seems to be  
quite flakey on 7.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.

Thought I did include it.  Must have used reply instead of reply all.



More information about the freebsd-stable mailing list