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