At Tue, 25 Nov 2003 23:45:48 +1100, Ken Foskey wrote:
> I am getting this error:
> 
> process.c:1018: warning: passing arg 1 of `putenv' discards qualifiers
> from pointer target type
> 
> It turns out that I am sending a "const" string to putenv which is
> defined:
> 
> ./stdlib.h:extern int putenv (char *__string) __THROW;
> 
> This discards the "constness" of the string.
> 
> Then I find this:
> 
> http://sources.redhat.com/ml/libc-hacker/1999-08/msg00008.html
> 
> which implies that it was const ages ago.
> 
> Should I raise this as a bug?

quoting from putenv(3) (from manpages-dev.deb 1.60-3):

NOTES
       The  putenv()  function is not required to be reentrant, and the one in
       libc4, libc5 and glibc2.0 is not, but the glibc2.1 version is.

       Description for libc4, libc5, glibc: If the argument string is  of  the
       form  name,  and  does  not contain an `=' character, then the variable
       name is removed from the environment.  If putenv() has  to  allocate  a
       new  array  environ,  and  the  previous  array  was  also allocated by
       putenv(), then it will be freed. In no case will the old storage  asso-
       ciated to the environment variable itself be freed.

       The  libc4  and  libc5  and  glibc 2.1.2 versions conform to SUSv2: the
       pointer string given to putenv() is used.  In particular,  this  string
       becomes  part  of  the  environment;  changing it later will change the
       environment.  (Thus, it is an error is to call putenv() with  an  auto-
       matic  variable  as the argument, then return from the calling function
       while string  is  still  part  of  the  environment.)   However,  glibc
       2.0-2.1.1  differs: a copy of the string is used.  On the one hand this
       causes a memory leak, and on the other hand it violates SUSv2. This has
       been fixed in glibc2.1.2.

       The BSD4.4 version, like glibc 2.0, uses a copy.

       SUSv2  removes the `const' from the prototype, and so does glibc 2.1.3.


-- 
 - Gus

-- 
SLUG - Sydney Linux User's Group - http://slug.org.au/
More Info: http://lists.slug.org.au/listinfo/slug

Reply via email to