getenv.c 548 B

1234567891011121314151617181920212223242526272829303132333435
  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. seek(f, 0, 0);
  22. r = read(f, ans, s);
  23. if(r >= 0) {
  24. ep = ans + s - 1;
  25. for(p = ans; p < ep; p++)
  26. if(*p == '\0')
  27. *p = ' ';
  28. ans[s] = '\0';
  29. }
  30. }
  31. close(f);
  32. return ans;
  33. }