getenv.c 589 B

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