1#include <stdlib.h>
2#include <string.h>
3#include <errno.h>
4
5extern char **__environ;
6extern char **__env_map;
7
8int unsetenv(const char *name)
9{
10	int i, j;
11	size_t l = strlen(name);
12
13	if (!*name || strchr(name, '=')) {
14		errno = EINVAL;
15		return -1;
16	}
17again:
18	for (i=0; __environ[i] && (memcmp(name, __environ[i], l) || __environ[i][l] != '='); i++);
19	if (__environ[i]) {
20		if (__env_map) {
21			for (j=0; __env_map[j] && __env_map[j] != __environ[i]; j++);
22			free (__env_map[j]);
23			for (; __env_map[j]; j++)
24				__env_map[j] = __env_map[j+1];
25		}
26		for (; __environ[i]; i++)
27			__environ[i] = __environ[i+1];
28		goto again;
29	}
30	return 0;
31}
32