6 extern char **__environ;
9 int __putenv(char *s, int a)
12 char *z = strchr(s, '=');
17 if (!z) return unsetenv(s);
19 for (; __environ[i] && memcmp(s, __environ[i], z-s+1); i++);
22 __env_map = calloc(2, sizeof(char *));
23 if (__env_map) __env_map[0] = s;
25 for (; __env_map[j] && __env_map[j] != __environ[i]; j++);
27 newmap = realloc(__env_map, sizeof(char *)*(j+2));
31 __env_map[j+1] = NULL;
39 newenv = malloc(sizeof(char *)*(i+2));
41 if (a && __env_map) __env_map[j] = 0;
44 memcpy(newenv, __environ, sizeof(char *)*i);
58 return __putenv(s, 0);