On Tue, Oct 13, 2009 at 8:32 AM, Guenter Knauf <[email protected]> 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 2.6.27.29, 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: NAME unsetenv - remove an environment variable SYNOPSIS [CX <javascript:open_code('CX')>] [image: [Option Start]] #include <stdlib.h<http://www.opengroup.org/onlinepubs/9699919799/basedefs/stdlib.h.html> > int unsetenv(const char **name*); [image: [Option End]] DESCRIPTION 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. RETURN VALUE Upon successful completion, zero shall be returned. Otherwise, -1 shall be returned, *errno* set to indicate the error, and the environment shall be unchanged. ERRORS 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 http://www.opengroup.org/onlinepubs/9699919799/functions/unsetenv.html -- Jonathan Leffler <[email protected]> #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 amused."
