clearenv for newlib
Jeff Johnston
jjohnstn@redhat.com
Fri Sep 14 18:51:00 GMT 2007
Joel Sherrill wrote:
> Hi,
>
> I am porting a library to RTEMS that is calling clearenv().
> I am willing to implement one for newlib. Is this a
> method OK for newlib to have?
>
> I was looking at the current environ code to gauge the
> difficulty and noticed that unsetenv() does not free
> any memory. Since putenv calls strdup(), I wonder
> if this is right.
>
> grep free libc/stdlib/*env*
>
> libc/stdlib/putenv_r.c: (void) _free_r (reent_ptr, p);
> libc/stdlib/putenv_r.c: (void) _free_r (reent_ptr, p);
>
> Those are error paths. Is this a leak?
>
> --joel
Hi Joel,
There isn't an issue with putenv because you'll notice that the free
of the strdup'd string is done after the call to _setenv_r (success or
failure).
There is a problem because of the environ pointer. We don't know what
each item points to. It may be an individually allocated string or it
might not. When we add new strings and we are forced to allocate, we
could keep track of those so that if these new items that are allocated
get removed, then we can handle it.
-- Jeff J.
More information about the Newlib
mailing list