xref: /plan9/sys/src/libc/9sys/getenv.c (revision be704722bae1150dc084fc9a71d384783a8495c6)
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