summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/ap/gen/putenv.c
blob: f92efda3e071851acd24415464353cb2992e699d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdlib.h>

extern	char **environ;

int
putenv(const char *str)
{
	char *s1, *s2, **e;
	int n;

	for(n = 0; s2 = environ[n]; n++)
		for(s1 = (char *)str; *s1 == *s2; s1++, s2++)
			if(*s1 == '\0' || *s1 == '='){
				environ[n] = (char*)str;
				return 0;
			}
	e = realloc(environ, (n+1) * sizeof(char*));
	if(e == 0)
		return -1;
	environ = e;
	e[n++] = (char*)str;
	e[n] = 0;
	return 0;
}