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