On Thu, Nov 24, 2011 at 05:15:30PM +0800, Mark wrote:
If you free the string, it will cause the environment variable
unavailable.
More details please see the following text extracted from manual of
"putenv":
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 automatic 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 glibc 2.1.2.
I don't think this matters since os-win32.c is only built for mingw,
which uses the Microsoft C runtime and not glibc.
However, there is no documentation for putenv(3) on MSDN because the
function has been deprecated :(. So I think the safest thing to do is
to assume this will leak memory but we are not allowed to free the
string.