[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: lynx-dev putenv
From: |
dickey |
Subject: |
Re: lynx-dev putenv |
Date: |
Wed, 20 Jan 1999 21:01:06 -0500 (EST) |
> After I repeatedly sent patches that try to
>
> FREE(lynx_version_putenv_command);
>
> Tom finally added the comment
>
> /* Note: you must not free the data passed to 'putenv()' until you give it
> * a new value for that variable.
> */
>
> instead, and I see now that there are similar ones about putenv in
> LYPrint.c and LYUtils.c.
>
> Ok, now I am curious, on which systems is that a problem? Does it only
all - afaik. Here's the Solaris manpage (SunOS has a similar note).
C Library Functions putenv(3C)
NAME
putenv - change or add value to environment
SYNOPSIS
#include <stdlib.h>
int putenv(const char *string);
DESCRIPTION
putenv() makes the value of the environment variable name
equal to value by altering an existing variable or creating
a new one. In either case, the string pointed to by string
becomes part of the environment, so altering the string will
change the environment. string points to a string of the
form ``name=value.'' The space used by string is no longer
used once a new string-defining name is passed to putenv().
RETURN VALUES
putenv() returns non-zero if it was unable to obtain enough
space using malloc() for an expanded environment, otherwise
zero is returned.
ERRORS
The putenv() function may fail if:
ENOMEM Insufficient memory was available.
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
__________________________________
| ATTRIBUTE TYPE| ATTRIBUTE VALUE|
|_______________|_________________|
| MT-Level | Safe |
|_______________|_________________|
SEE ALSO
exec(2), getenv(3C), malloc(3C), attributes(5), environ(5)
NOTES
This routine uses malloc(3C) to enlarge the environment.
After putenv() is called, environment variables are not in
alphabetical order.
string should not be an automatic variable.
string should be declared static if it is declared within a
function because it cannot be automatically declared.
SunOS 5.6 Last change: 29 Dec 1996 1
C Library Functions putenv(3C)
A potential error is to call the function putenv() with a
pointer to an automatic variable as the argument and to then
exit the calling function while string is still part of the
environment.
putenv() can be safely called from a multi-thread program.
However, care must still be taken when using putenv() and
getenv(3C) in a multi-thread program. These routines exam-
ine and modify the environment list. This list is shared by
all threads in a program. The system prevents the list from
being accessed simultaneously by two different threads.
However, it does not prevent two threads from successively
accessing the environment list using putenv() or getenv(3C).
> Klaus
--
Thomas E. Dickey
address@hidden
http://www.clark.net/pub/dickey