#include #include #include extern char **__environ; extern char **__env_map; int unsetenv(const char *name) { int i, j; size_t l = strlen(name); if (!*name || strchr(name, '=')) { errno = EINVAL; return -1; } again: for (i=0; __environ[i] && (memcmp(name, __environ[i], l) || __environ[i][l] != '='); i++); if (__environ[i]) { if (__env_map) { for (j=0; __env_map[j] && __env_map[j] != __environ[i]; j++); free (__env_map[j]); for (; __env_map[j]; j++) __env_map[j] = __env_map[j+1]; } for (; __environ[i]; i++) __environ[i] = __environ[i+1]; goto again; } return 0; }