|
|
1.1 ! root 1: /* putenv.c - generic putenv() */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/compat/RCS/putenv.c,v 7.0 89/11/23 21:23:21 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/compat/RCS/putenv.c,v 7.0 89/11/23 21:23:21 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: putenv.c,v $ ! 12: * Revision 7.0 89/11/23 21:23:21 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: /* LINTLIBRARY */ ! 29: ! 30: #include <stdio.h> ! 31: #include "general.h" ! 32: #include "manifest.h" ! 33: ! 34: /* */ ! 35: ! 36: extern char **environ; ! 37: ! 38: /* */ ! 39: ! 40: int setenv (name, value) ! 41: register char *name, ! 42: *value; ! 43: { ! 44: register int i; ! 45: register char **ep, ! 46: **nep, ! 47: *cp; ! 48: ! 49: if ((cp = malloc ((unsigned) (strlen (name) + strlen (value) + 2))) ! 50: == NULL) ! 51: return 1; ! 52: (void) sprintf (cp, "%s=%s", name, value); ! 53: ! 54: for (ep = environ, i = 0; *ep; ep++, i++) ! 55: if (nvmatch (name, *ep)) { ! 56: *ep = cp; ! 57: return 0; ! 58: } ! 59: ! 60: if ((nep = (char **) malloc ((unsigned) ((i + 2) * sizeof *nep))) ! 61: == NULL) { ! 62: free (cp); ! 63: return 1; ! 64: } ! 65: for (ep = environ, i = 0; *ep; nep[i++] = *ep++) ! 66: continue; ! 67: nep[i++] = cp; ! 68: nep[i] = NULL; ! 69: environ = nep; ! 70: return 0; ! 71: } ! 72: ! 73: /* */ ! 74: ! 75: int unsetenv (name) ! 76: char *name; ! 77: { ! 78: char **ep, ! 79: **nep; ! 80: ! 81: for (ep = environ; *ep; ep++) ! 82: if (nvmatch (name, *ep)) ! 83: break; ! 84: if (*ep == NULL) ! 85: return 1; ! 86: ! 87: for (nep = ep + 1; *nep; nep++) ! 88: continue; ! 89: *ep = *--nep; ! 90: *nep = NULL; ! 91: return 0; ! 92: } ! 93: ! 94: /* */ ! 95: ! 96: static nvmatch (s1, s2) ! 97: register char *s1, ! 98: *s2; ! 99: { ! 100: while (*s1 == *s2++) ! 101: if (*s1++ == '=') ! 102: return 1; ! 103: ! 104: return (*s1 == '\0' && *--s2 == '='); ! 105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.