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);