|
|
1.1 ! root 1: /* putenv.c - (un) set an envariable */ ! 2: ! 3: #include "../h/mh.h" ! 4: #include <stdio.h> ! 5: ! 6: ! 7: extern char **environ; ! 8: ! 9: ! 10: int putenv (name, value) ! 11: register char *name, ! 12: *value; ! 13: { ! 14: register int i; ! 15: register char **ep, ! 16: **nep, ! 17: *cp; ! 18: ! 19: if ((cp = malloc ((unsigned) (strlen (name) + strlen (value) + 2))) ! 20: == NULL) ! 21: return 1; ! 22: (void) sprintf (cp, "%s=%s", name, value); ! 23: ! 24: for (ep = environ, i = 0; *ep; ep++, i++) ! 25: if (nvmatch (name, *ep)) { ! 26: *ep = cp; ! 27: return 0; ! 28: } ! 29: ! 30: if ((nep = (char **) malloc ((unsigned) ((i + 2) * sizeof *nep))) == NULL) ! 31: return 1; ! 32: for (ep = environ, i = 0; *ep; nep[i++] = *ep++) ! 33: continue; ! 34: nep[i++] = cp; ! 35: nep[i] = NULL; ! 36: environ = nep; ! 37: return 0; ! 38: } ! 39: ! 40: ! 41: int unputenv (name) ! 42: char *name; ! 43: { ! 44: char **ep, ! 45: **nep; ! 46: ! 47: for (ep = environ; *ep; ep++) ! 48: if (nvmatch (name, *ep)) ! 49: break; ! 50: if (*ep == NULL) ! 51: return 1; ! 52: ! 53: for (nep = ep + 1; *nep; nep++) ! 54: continue; ! 55: *ep = *--nep; ! 56: *nep = NULL; ! 57: return 0; ! 58: } ! 59: ! 60: /* */ ! 61: ! 62: static nvmatch (s1, s2) ! 63: register char *s1, ! 64: *s2; ! 65: { ! 66: while (*s1 == *s2++) ! 67: if (*s1++ == '=') ! 68: return 1; ! 69: ! 70: return (*s1 == '\0' && *--s2 == '='); ! 71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.