apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Leffler <jonathan.leff...@gmail.com>
Subject Re: need some info about unsetenv on other platforms
Date Tue, 13 Oct 2009 18:09:22 GMT
On Tue, Oct 13, 2009 at 8:32 AM, Guenter Knauf <fuankg@apache.org> wrote:

> Hi,
> I was just looking into the setenv / unsetenv stuff in APR, and found
> that we assume that unsetenv doesnt have a return value on all
> platforms. I have searched a bit, and found these:
> http://linux.die.net/man/3/setenv
> http://www.manpagez.com/man/3/unsetenv/
> from that it seems that there are newer versions of unsetenv() out which
> return an int and set errno. I've tested this on Linux, and I
> dont get an error back when I try to unsetenv a non-existent var ...
> now I would like to get some info about how MacOSX and *BSD platforms
> behave - see attached sample for a quick test. Form the docu at least
> MacOSX should return EINVAL for a non-existent var ...

POSIX has a different view on the correct behaviour:


unsetenv - remove an environment variable


[CX <javascript:open_code('CX')>] [image: [Option Start]] #include

int unsetenv(const char **name*); [image: [Option End]]


The *unsetenv*() function shall remove an environment variable from the
environment of the calling process. The *name* argument points to a string,
which is the name of the variable to be removed. The named argument shall
not contain an '=' character. If the named variable does not exist in the
current environment, the environment shall be unchanged and the function is
considered to have completed successfully.

If the application modifies *environ* or the pointers to which it points,
the behavior of *unsetenv*() is undefined. The *unsetenv*() function shall
update the list of pointers to which *environ* points.

The *unsetenv*() function need not be thread-safe.


Upon successful completion, zero shall be returned. Otherwise, -1 shall be
returned, *errno* set to indicate the error, and the environment shall be


The *unsetenv*() function shall fail if:
[EINVAL]The *name* argument is a null pointer, points to an empty string, or
points to a string containing an '=' character.

Note that unsetting a non-existent variable is explicitly documented as a
successful no-op.  This info from


Jonathan Leffler <jonathan.leffler@gmail.com>  #include <disclaimer.h>
Guardian of DBD::Informix - v2008.0513 - http://dbi.perl.org
"Blessed are we who can laugh at ourselves, for we shall never cease to be

View raw message