4 extern char **__environ;
7 int __putenv(char *s, int a)
10 char *z = strchr(s, '=');
15 if (!z) return unsetenv(s);
17 for (; __environ[i] && memcmp(s, __environ[i], z-s+1); i++);
20 __env_map = calloc(2, sizeof(char *));
21 if (__env_map) __env_map[0] = s;
23 for (; __env_map[j] && __env_map[j] != __environ[i]; j++);
25 newmap = realloc(__env_map, sizeof(char *)*(j+2));
29 __env_map[j+1] = NULL;
38 newenv = malloc(sizeof(char *)*(i+2));
40 if (a && __env_map) __env_map[j] = 0;
43 memcpy(newenv, __environ, sizeof(char *)*i);
57 return __putenv(s, 0);