| #include <stdlib.h> |
| #include <string.h> |
| #include <errno.h> |
| |
| 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; |
| } |