13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier
43e12c5d1SDavid du Colombier char*
getenv(char * name)53e12c5d1SDavid du Colombier getenv(char *name)
63e12c5d1SDavid du Colombier {
77dd7cddfSDavid du Colombier int r, f;
83e12c5d1SDavid du Colombier long s;
97dd7cddfSDavid du Colombier char *ans;
1080ee5cbfSDavid du Colombier char *p, *ep, ename[100];
113e12c5d1SDavid du Colombier
1280ee5cbfSDavid du Colombier if(strchr(name, '/') != nil)
1380ee5cbfSDavid du Colombier return nil;
1480ee5cbfSDavid du Colombier snprint(ename, sizeof ename, "/env/%s", name);
1580ee5cbfSDavid du Colombier if(strcmp(ename+5, name) != 0)
1680ee5cbfSDavid du Colombier return nil;
173e12c5d1SDavid du Colombier f = open(ename, OREAD);
183e12c5d1SDavid du Colombier if(f < 0)
193e12c5d1SDavid du Colombier return 0;
203e12c5d1SDavid du Colombier s = seek(f, 0, 2);
213e12c5d1SDavid du Colombier ans = malloc(s+1);
223e12c5d1SDavid du Colombier if(ans) {
23*be704722SDavid du Colombier setmalloctag(ans, getcallerpc(&name));
243e12c5d1SDavid du Colombier seek(f, 0, 0);
257dd7cddfSDavid du Colombier r = read(f, ans, s);
267dd7cddfSDavid du Colombier if(r >= 0) {
277dd7cddfSDavid du Colombier ep = ans + s - 1;
287dd7cddfSDavid du Colombier for(p = ans; p < ep; p++)
297dd7cddfSDavid du Colombier if(*p == '\0')
307dd7cddfSDavid du Colombier *p = ' ';
317dd7cddfSDavid du Colombier ans[s] = '\0';
327dd7cddfSDavid du Colombier }
333e12c5d1SDavid du Colombier }
343e12c5d1SDavid du Colombier close(f);
353e12c5d1SDavid du Colombier return ans;
363e12c5d1SDavid du Colombier }
37