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