xref: /plan9-contrib/sys/src/ape/lib/bsd/putenv.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include <sys/types.h>
2*219b2ee8SDavid du Colombier #include <unistd.h>
3*219b2ee8SDavid du Colombier #include <fcntl.h>
4*219b2ee8SDavid du Colombier #include <string.h>
5*219b2ee8SDavid du Colombier 
6*219b2ee8SDavid du Colombier int
7*219b2ee8SDavid du Colombier putenv(char *s)
8*219b2ee8SDavid du Colombier {
9*219b2ee8SDavid du Colombier 	int f, n;
10*219b2ee8SDavid du Colombier 	char *value;
11*219b2ee8SDavid du Colombier 	char buf[300];
12*219b2ee8SDavid du Colombier 
13*219b2ee8SDavid du Colombier 	value = strchr(s, '=');
14*219b2ee8SDavid du Colombier 	if (value) {
15*219b2ee8SDavid du Colombier 		n = value-s;
16*219b2ee8SDavid du Colombier 		if(n<=0 || n > sizeof(buf)-1)
17*219b2ee8SDavid du Colombier 			return -1;
18*219b2ee8SDavid du Colombier 		strncpy(buf, s, n);
19*219b2ee8SDavid du Colombier 		buf[n] = 0;
20*219b2ee8SDavid du Colombier 		f = creat(buf, 0666);
21*219b2ee8SDavid du Colombier 		if(f < 0)
22*219b2ee8SDavid du Colombier 			return 1;
23*219b2ee8SDavid du Colombier 		value++;
24*219b2ee8SDavid du Colombier 		n = strlen(value);
25*219b2ee8SDavid du Colombier 		if(write(f, buf, n) != n)
26*219b2ee8SDavid du Colombier 			return -1;
27*219b2ee8SDavid du Colombier 		close(f);
28*219b2ee8SDavid du Colombier 		return 0;
29*219b2ee8SDavid du Colombier 	} else
30*219b2ee8SDavid du Colombier 		return -1;
31*219b2ee8SDavid du Colombier }
32