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.
This commit is contained in:
Alexander Monakov 2017-09-03 22:12:21 +03:00 committed by Rich Felker
parent 8e932792c9
commit cc0dbd5f09
1 changed files with 6 additions and 2 deletions

8
src/env/clearenv.c vendored
View File

@ -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;
}