On Wed, 2 Mar 2016, The Doctor wrote:
> Got a problem compiling this
>
> This line
>
> if (unsetenv(CS *name) < 0) return FALSE;
>
> is prevent the compilation.
>
> gcc environment.c
> environment.c: In function `cleanup_environment':
> environment.c:54: warning: cast to pointer from integer of different size
> environment.c:54: void value not ignored as it ought to be
>
> and
>
> man unsetenv
> GETENV(3) BSD Programmer's Manual GETENV(3)
>
> NAME
> getenv, putenv, setenv, unsetenv - environment variable functions
>
> SYNOPSIS
> #include <stdlib.h>
>
> char *
> getenv(const char *name);
>
> int
> setenv(const char *name, const char *value, int overwrite);
>
> int
> putenv(const char *string);
>
> void
> unsetenv(const char *name);
>
> DESCRIPTION
> These functions set, unset and fetch environment variables from the host
> environment list. For compatibility with differing environment conven-
> tions, the given arguments name and value may be appended and prepended,
> respectively, with an equal sign ``=''.
>
> The getenv() function obtains the current value of the environment vari-
> able, name. If the variable name is not in the current environment, a
> null pointer is returned.
>
> The setenv() function inserts or resets the environment variable name in
> the current environment list. If the variable name does not exist in the
> list, it is inserted with the given value. If the variable does exist,
> the argument overwrite is tested; if overwrite is zero, the variable is
> not reset, otherwise it is reset to the given value.
>
> The putenv() function takes an argument of the form ``name=value'' and is
> equivalent to:
>
> setenv(name, value, 1);
>
> The unsetenv() function deletes all instances of the variable name point-
> ed to by name from the list.
>
> RETURN VALUES
> The functions setenv() and putenv() return zero if successful; otherwise
> the global variable errno is set to indicate the error and a -1 is re-
> turned.
>
> ERRORS
> [ENOMEM] The function setenv() or putenv() failed because they were un-
> able to allocate memory for the environment.
>
> SEE ALSO
> csh(1), sh(1), execve(2), environ(7)
>
> STANDARDS
> The getenv() function conforms to ANSI C X3.159-1989 (``ANSI C '').
Hmm. Looks like BSD and Linux differ:
SYNOPSIS
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name);
Feature Test Macro Requirements for glibc (see fea-
ture_test_macros(7)):
setenv(), unsetenv(): _BSD_SOURCE || _POSIX_C_SOURCE >= 200112L
|| _XOPEN_SOURCE >= 600
... ... ..
RETURN VALUE
The setenv() function returns zero on success, or -1 if there
was insufficient space in the environment.
The unsetenv() function returns zero on success, or -1 on error,
with errno set to indicate the cause of the error.
ERRORS
EINVAL name contained an '=' character.
CONFORMING TO
4.3BSD, POSIX.1-2001.
NOTES
POSIX.1-2001 does not require setenv() or unsetenv() to be reentrant.
Prior to glibc 2.2.2, unsetenv() was prototyped as returning void;
more recent glibc versions follow the POSIX.1-2001-compliant
prototype shown in the SYNOPSIS.