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: }
Defined functions
putenv
defined in line
10; used 13 times