Re: [SLUG] compiler warnings

2003-11-25 Thread Angus Lees
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/msg8.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


Re: [SLUG] compiler warnings

2003-11-25 Thread Brett Nash
> It turns out that I am sending a "const" string to putenv which is
> defined:
> 
> ./stdlib.h:extern int putenv (char *__string) __THROW;

> Should I raise this as a bug?

It isn't actually a bug.  putenv puts the supplied string into the
environment (not a copy, the supplied string).  This means a future call
to getenv will return a pointer to it, (a char *), which can be modified
to change the value.  Thus to be correct putenv can't take a const, as
it can't guarentee how the pointer will be used in future.

Take a look at the man page for putenv, in particular the notes.  As you
can see from the description, the function has a rather interesting
history in glibc ;-)

Regards,
nash
[Too much C for my own good]
-- 
Brett Nash <[EMAIL PROTECTED]>
Sometimes it's better to light a flamethrower than curse the darkness.
-- 
SLUG - Sydney Linux User's Group - http://slug.org.au/
More Info: http://lists.slug.org.au/listinfo/slug


Re: [SLUG] compiler warnings

2003-11-25 Thread Robert Collins
On Tue, 2003-11-25 at 23:45, 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:

I'd ask on the relevant libc list :]

Rob
-- 
GPG key available at: .


signature.asc
Description: This is a digitally signed message part
-- 
SLUG - Sydney Linux User's Group - http://slug.org.au/
More Info: http://lists.slug.org.au/listinfo/slug


[SLUG] compiler warnings

2003-11-25 Thread Ken Foskey


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/msg8.html

which implies that it was const ages ago.

Should I raise this as a bug?

-- 
Thanks
KenF
OpenOffice.org developer

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