5 char *__strchrnul(const char *, int);
7 static void dummy(char *old, char *new) {}
8 weak_alias(dummy, __env_rm_add);
10 int __putenv(char *s, size_t l, char *r)
14 for (char **e = __environ; *e; e++, i++)
15 if (!strncmp(s, *e, l+1)) {
24 if (__environ == oldenv) {
25 newenv = realloc(oldenv, sizeof *newenv * (i+2));
26 if (!newenv) goto oom;
28 newenv = malloc(sizeof *newenv * (i+2));
29 if (!newenv) goto oom;
30 if (i) memcpy(newenv, __environ, sizeof *newenv * i);
35 __environ = oldenv = newenv;
36 if (r) __env_rm_add(0, r);
45 size_t l = __strchrnul(s, '=') - s;
46 if (!l || !s[l]) return unsetenv(s);
47 return __putenv(s, l, 0);