xref: /csrg-svn/lib/libc/stdlib/getenv.c (revision 26554)
1*26554Sdonn #if defined(LIBC_SCCS) && !defined(lint)
2*26554Sdonn static char sccsid[] = "@(#)getenv.c	5.2 (Berkeley) 03/09/86";
3*26554Sdonn #endif LIBC_SCCS and not lint
422090Smckusick 
51967Swnj /*
61967Swnj  *	getenv(name)
71967Swnj  *	returns ptr to value associated with name, if any, else NULL
81967Swnj  */
91967Swnj #define NULL	0
101967Swnj extern	char **environ;
111967Swnj char	*nvmatch();
121967Swnj 
131967Swnj char *
141967Swnj getenv(name)
151967Swnj register char *name;
161967Swnj {
171967Swnj 	register char **p = environ;
181967Swnj 	register char *v;
191967Swnj 
201967Swnj 	while (*p != NULL)
211967Swnj 		if ((v = nvmatch(name, *p++)) != NULL)
221967Swnj 			return(v);
231967Swnj 	return(NULL);
241967Swnj }
251967Swnj 
261967Swnj /*
271967Swnj  *	s1 is either name, or name=value
281967Swnj  *	s2 is name=value
291967Swnj  *	if names match, return value of s2, else NULL
301967Swnj  *	used for environment searching: see getenv
311967Swnj  */
321967Swnj 
331967Swnj static char *
341967Swnj nvmatch(s1, s2)
351967Swnj register char *s1, *s2;
361967Swnj {
371967Swnj 
381967Swnj 	while (*s1 == *s2++)
391967Swnj 		if (*s1++ == '=')
401967Swnj 			return(s2);
411967Swnj 	if (*s1 == '\0' && *(s2-1) == '=')
421967Swnj 		return(s2);
431967Swnj 	return(NULL);
441967Swnj }
45