lynx-dev
[Top][All Lists]
Advanced

[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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]