xref: /plan9/sys/src/ape/lib/bsd/putenv.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1219b2ee8SDavid du Colombier #include <sys/types.h>
2219b2ee8SDavid du Colombier #include <unistd.h>
3219b2ee8SDavid du Colombier #include <fcntl.h>
4219b2ee8SDavid du Colombier #include <string.h>
5219b2ee8SDavid du Colombier 
6219b2ee8SDavid du Colombier int
putenv(char * s)7219b2ee8SDavid du Colombier putenv(char *s)
8219b2ee8SDavid du Colombier {
9219b2ee8SDavid du Colombier 	int f, n;
10219b2ee8SDavid du Colombier 	char *value;
11219b2ee8SDavid du Colombier 	char buf[300];
12219b2ee8SDavid du Colombier 
13219b2ee8SDavid du Colombier 	value = strchr(s, '=');
14219b2ee8SDavid du Colombier 	if (value) {
15219b2ee8SDavid du Colombier 		n = value-s;
16*7dd7cddfSDavid du Colombier 		if(n<=0 || n > sizeof(buf)-6)
17219b2ee8SDavid du Colombier 			return -1;
18*7dd7cddfSDavid du Colombier 		strcpy(buf, "/env/");
19*7dd7cddfSDavid du Colombier 		strncpy(buf+5, s, n);
20*7dd7cddfSDavid du Colombier 		buf[n+5] = 0;
21219b2ee8SDavid du Colombier 		f = creat(buf, 0666);
22219b2ee8SDavid du Colombier 		if(f < 0)
23219b2ee8SDavid du Colombier 			return 1;
24219b2ee8SDavid du Colombier 		value++;
25219b2ee8SDavid du Colombier 		n = strlen(value);
26*7dd7cddfSDavid du Colombier 		if(write(f, value, n) != n)
27219b2ee8SDavid du Colombier 			return -1;
28219b2ee8SDavid du Colombier 		close(f);
29219b2ee8SDavid du Colombier 		return 0;
30219b2ee8SDavid du Colombier 	} else
31219b2ee8SDavid du Colombier 		return -1;
32219b2ee8SDavid du Colombier }
33