1 #include <u.h> 2 #include <libc.h> 3 4 char* 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