xref: /csrg-svn/lib/libc/stdlib/getenv.c (revision 1967)
1*1967Swnj /* @(#)getenv.c	4.1 (Berkeley) 12/21/80 */
2*1967Swnj /*
3*1967Swnj  *	getenv(name)
4*1967Swnj  *	returns ptr to value associated with name, if any, else NULL
5*1967Swnj  */
6*1967Swnj #define NULL	0
7*1967Swnj extern	char **environ;
8*1967Swnj char	*nvmatch();
9*1967Swnj 
10*1967Swnj char *
11*1967Swnj getenv(name)
12*1967Swnj register char *name;
13*1967Swnj {
14*1967Swnj 	register char **p = environ;
15*1967Swnj 	register char *v;
16*1967Swnj 
17*1967Swnj 	while (*p != NULL)
18*1967Swnj 		if ((v = nvmatch(name, *p++)) != NULL)
19*1967Swnj 			return(v);
20*1967Swnj 	return(NULL);
21*1967Swnj }
22*1967Swnj 
23*1967Swnj /*
24*1967Swnj  *	s1 is either name, or name=value
25*1967Swnj  *	s2 is name=value
26*1967Swnj  *	if names match, return value of s2, else NULL
27*1967Swnj  *	used for environment searching: see getenv
28*1967Swnj  */
29*1967Swnj 
30*1967Swnj static char *
31*1967Swnj nvmatch(s1, s2)
32*1967Swnj register char *s1, *s2;
33*1967Swnj {
34*1967Swnj 
35*1967Swnj 	while (*s1 == *s2++)
36*1967Swnj 		if (*s1++ == '=')
37*1967Swnj 			return(s2);
38*1967Swnj 	if (*s1 == '\0' && *(s2-1) == '=')
39*1967Swnj 		return(s2);
40*1967Swnj 	return(NULL);
41*1967Swnj }
42