Changeset View
Changeset View
Standalone View
Standalone View
contrib/tcp_wrappers/environ.c
Show All 31 Lines | |||||
static int addenv(); /* append entry to environment */ | static int addenv(); /* append entry to environment */ | ||||
static int allocated = 0; /* environ is, or is not, allocated */ | static int allocated = 0; /* environ is, or is not, allocated */ | ||||
#define DO_CLOBBER 1 | #define DO_CLOBBER 1 | ||||
/* namelength - determine length of name in "name=whatever" */ | /* namelength - determine length of name in "name=whatever" */ | ||||
static int namelength(name) | static int namelength(char *name) | ||||
char *name; | |||||
{ | { | ||||
char *equal; | char *equal; | ||||
equal = strchr(name, '='); | equal = strchr(name, '='); | ||||
return ((equal == 0) ? strlen(name) : (equal - name)); | return ((equal == 0) ? strlen(name) : (equal - name)); | ||||
} | } | ||||
/* findenv - given name, locate name=value */ | /* findenv - given name, locate name=value */ | ||||
static char **findenv(name, len) | static char **findenv(char *name, int len) | ||||
char *name; | |||||
int len; | |||||
{ | { | ||||
char **envp; | char **envp; | ||||
for (envp = environ; envp && *envp; envp++) | for (envp = environ; envp && *envp; envp++) | ||||
if (strncmp(name, *envp, len) == 0 && (*envp)[len] == '=') | if (strncmp(name, *envp, len) == 0 && (*envp)[len] == '=') | ||||
return (envp); | return (envp); | ||||
return (0); | return (0); | ||||
} | } | ||||
/* getenv - given name, locate value */ | /* getenv - given name, locate value */ | ||||
char *getenv(name) | char *getenv(char *name) | ||||
char *name; | |||||
{ | { | ||||
int len = namelength(name); | int len = namelength(name); | ||||
char **envp = findenv(name, len); | char **envp = findenv(name, len); | ||||
return (envp ? *envp + len + 1 : 0); | return (envp ? *envp + len + 1 : 0); | ||||
} | } | ||||
/* putenv - update or append environment (name,value) pair */ | /* putenv - update or append environment (name,value) pair */ | ||||
int putenv(nameval) | int putenv(char *nameval) | ||||
char *nameval; | |||||
{ | { | ||||
char *equal = strchr(nameval, '='); | char *equal = strchr(nameval, '='); | ||||
char *value = (equal ? equal : ""); | char *value = (equal ? equal : ""); | ||||
return (setenv(nameval, value, DO_CLOBBER)); | return (setenv(nameval, value, DO_CLOBBER)); | ||||
} | } | ||||
/* unsetenv - remove variable from environment */ | /* unsetenv - remove variable from environment */ | ||||
void unsetenv(name) | void unsetenv(char *name) | ||||
char *name; | |||||
{ | { | ||||
char **envp; | char **envp; | ||||
if ((envp = findenv(name, namelength(name))) != 0) | if ((envp = findenv(name, namelength(name))) != 0) | ||||
while (envp[0] = envp[1]) | while (envp[0] = envp[1]) | ||||
envp++; | envp++; | ||||
} | } | ||||
/* setenv - update or append environment (name,value) pair */ | /* setenv - update or append environment (name,value) pair */ | ||||
int setenv(name, value, clobber) | int setenv(char *name, char *value, int clobber) | ||||
char *name; | |||||
char *value; | |||||
int clobber; | |||||
{ | { | ||||
char *destination; | char *destination; | ||||
char **envp; | char **envp; | ||||
int l_name; /* length of name part */ | int l_name; /* length of name part */ | ||||
int l_nameval; /* length of name=value */ | int l_nameval; /* length of name=value */ | ||||
/* Permit name= and =value. */ | /* Permit name= and =value. */ | ||||
Show All 17 Lines | return (-1); | ||||
strncpy(destination, name, l_name); | strncpy(destination, name, l_name); | ||||
destination[l_name] = '='; | destination[l_name] = '='; | ||||
strcpy(destination + l_name + 1, value); | strcpy(destination + l_name + 1, value); | ||||
return ((envp == 0) ? addenv(destination) : (*envp = destination, 0)); | return ((envp == 0) ? addenv(destination) : (*envp = destination, 0)); | ||||
} | } | ||||
/* cmalloc - malloc and copy block of memory */ | /* cmalloc - malloc and copy block of memory */ | ||||
static char *cmalloc(new_len, old, old_len) | static char *cmalloc(int new_len, char *old, int old_len) | ||||
char *old; | |||||
int old_len; | |||||
{ | { | ||||
char *new = malloc(new_len); | char *new = malloc(new_len); | ||||
if (new != 0) | if (new != 0) | ||||
memcpy(new, old, old_len); | memcpy(new, old, old_len); | ||||
return (new); | return (new); | ||||
} | } | ||||
/* addenv - append environment entry */ | /* addenv - append environment entry */ | ||||
static int addenv(nameval) | static int addenv(char *nameval) | ||||
char *nameval; | |||||
{ | { | ||||
char **envp; | char **envp; | ||||
int n_used; /* number of environment entries */ | int n_used; /* number of environment entries */ | ||||
int l_used; /* bytes used excl. terminator */ | int l_used; /* bytes used excl. terminator */ | ||||
int l_need; /* bytes needed incl. terminator */ | int l_need; /* bytes needed incl. terminator */ | ||||
for (envp = environ; envp && *envp; envp++) | for (envp = environ; envp && *envp; envp++) | ||||
/* void */ ; | /* void */ ; | ||||
Show All 26 Lines | |||||
static void printenv() | static void printenv() | ||||
{ | { | ||||
char **envp; | char **envp; | ||||
for (envp = environ; envp && *envp; envp++) | for (envp = environ; envp && *envp; envp++) | ||||
printf("%s\n", *envp); | printf("%s\n", *envp); | ||||
} | } | ||||
int main(argc, argv) | int main(int argc, char **argv) | ||||
int argc; | |||||
char **argv; | |||||
{ | { | ||||
char *cp; | char *cp; | ||||
int changed = 0; | int changed = 0; | ||||
if (argc < 2) { | if (argc < 2) { | ||||
printf("usage: %s name[=value]...\n", argv[0]); | printf("usage: %s name[=value]...\n", argv[0]); | ||||
return (1); | return (1); | ||||
} | } | ||||
Show All 21 Lines |