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