xref: /plan9/sys/src/libc/9sys/getenv.c (revision be704722bae1150dc084fc9a71d384783a8495c6)
1 #include <u.h>
2 #include <libc.h>
3 
4 char*
getenv(char * name)5 getenv(char *name)
6 {
7 	int r, f;
8 	long s;
9 	char *ans;
10 	char *p, *ep, ename[100];
11 
12 	if(strchr(name, '/') != nil)
13 		return nil;
14 	snprint(ename, sizeof ename, "/env/%s", name);
15 	if(strcmp(ename+5, name) != 0)
16 		return nil;
17 	f = open(ename, OREAD);
18 	if(f < 0)
19 		return 0;
20 	s = seek(f, 0, 2);
21 	ans = malloc(s+1);
22 	if(ans) {
23 		setmalloctag(ans, getcallerpc(&name));
24 		seek(f, 0, 0);
25 		r = read(f, ans, s);
26 		if(r >= 0) {
27 			ep = ans + s - 1;
28 			for(p = ans; p < ep; p++)
29 				if(*p == '\0')
30 					*p = ' ';
31 			ans[s] = '\0';
32 		}
33 	}
34 	close(f);
35 	return ans;
36 }
37