66 lines
1.3 KiB
C
Executable File
66 lines
1.3 KiB
C
Executable File
/* Copyright (c) 1988 AT&T */
|
|
/* All Rights Reserved */
|
|
|
|
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
|
|
/* The copyright notice above does not evidence any */
|
|
/* actual or intended publication of such source code. */
|
|
|
|
#ident "@(#)getenv.c 1.11 93/09/13 SMI" /* SVr4.0 1.8 */
|
|
|
|
/*LINTLIBRARY*/
|
|
/*
|
|
* getenv(name)
|
|
* returns ptr to value associated with name, if any, else NULL
|
|
*/
|
|
#define NULL 0
|
|
#include "synonyms.h"
|
|
#include "shlib.h"
|
|
#include <thread.h>
|
|
#include <synch.h>
|
|
#include <mtlib.h>
|
|
|
|
extern char **environ;
|
|
static char *nvmatch();
|
|
|
|
#ifdef _REENTRANT
|
|
extern mutex_t __environ_lock;
|
|
#endif _REENTRANT
|
|
|
|
char *
|
|
getenv(name)
|
|
register const char *name;
|
|
{
|
|
register char *v = NULL, **p;
|
|
|
|
_mutex_lock(&__environ_lock);
|
|
p = environ;
|
|
if (p == NULL) {
|
|
_mutex_unlock(&__environ_lock);
|
|
return (NULL);
|
|
}
|
|
while (*p != NULL)
|
|
if ((v = nvmatch(name, *p++)) != NULL)
|
|
break;
|
|
_mutex_unlock(&__environ_lock);
|
|
return (v);
|
|
}
|
|
|
|
/*
|
|
* s1 is either name, or name=value
|
|
* s2 is name=value
|
|
* if names match, return value of s2, else NULL
|
|
* used for environment searching: see getenv
|
|
*/
|
|
|
|
static char *
|
|
nvmatch(s1, s2)
|
|
register char *s1, *s2;
|
|
{
|
|
while (*s1 == *s2++)
|
|
if (*s1++ == '=')
|
|
return (s2);
|
|
if (*s1 == '\0' && *(s2-1) == '=')
|
|
return (s2);
|
|
return (NULL);
|
|
}
|