1#include <errno.h>2#include <stdlib.h>3#include <string.h>45extern char **_environ;67int8putenv(char *name)9{10 char **p, *s;11 size_t siz, len, cnt;12 static char **lastenv;1314 if ((s = strchr(name, '=')) == NULL) {15 errno = EINVAL;16 return -1;17 }18 len = s - name;1920 for (p = _environ; *p; ++p) {21 if (!strncmp(name, *p, len) && (*p)[len] == '=') {22 *p = name;23 return 0;24 }25 }2627 cnt = p - _environ;28 siz = (cnt + 2) * sizeof(char **);2930 if ((p = realloc(lastenv, siz)) == NULL)31 return -1;32 if (!lastenv)33 memcpy(p, _environ, cnt * sizeof(char **));34 lastenv = _environ = p;3536 p[cnt] = name;37 p[cnt+1] = NULL;3839 return 0;40}