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