diff options
author | Alexander Monakov <amonakov@ispras.ru> | 2017-09-03 22:12:21 +0300 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2017-09-04 15:55:21 -0400 |
commit | cc0dbd5f09337c187156fe8b697245e6ea9263d0 (patch) | |
tree | acd199bba8ec96d1a5ad250ac7211d1d8346e578 /src/env | |
parent | 8e932792c917d11545c2953b35159149f7411eca (diff) | |
download | musl-cc0dbd5f09337c187156fe8b697245e6ea9263d0.tar.gz musl-cc0dbd5f09337c187156fe8b697245e6ea9263d0.tar.xz musl-cc0dbd5f09337c187156fe8b697245e6ea9263d0.zip |
free allocations in clearenv
This aligns clearenv with the Linux man page by setting 'environ' rather than '*environ' to NULL, and stops it from leaking entries allocated by the libc.
Diffstat (limited to 'src/env')
-rw-r--r-- | src/env/clearenv.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/env/clearenv.c b/src/env/clearenv.c index 62d50952..da187752 100644 --- a/src/env/clearenv.c +++ b/src/env/clearenv.c @@ -1,10 +1,14 @@ #define _GNU_SOURCE #include <stdlib.h> +#include "libc.h" -extern char **__environ; +static void dummy(char *old, char *new) {} +weak_alias(dummy, __env_rm_add); int clearenv() { - __environ[0] = 0; + char **e = __environ; + __environ = 0; + if (e) while (*e) __env_rm_add(*e++, 0); return 0; } |