version 1.23, 2010/06/02 19:30:10 |
version 1.24, 2010/07/08 21:11:31 |
|
|
unsetenv(var) |
unsetenv(var) |
const char *var; |
const char *var; |
{ |
{ |
char **ep = env.envp; |
char **ep; |
size_t len; |
size_t len; |
|
|
if (strchr(var, '=') != NULL) { |
if (var == NULL || *var == '\0' || strchr(var, '=') != NULL) { |
errno = EINVAL; |
errno = EINVAL; |
#ifdef UNSETENV_VOID |
#ifdef UNSETENV_VOID |
return; |
return; |
|
|
} |
} |
|
|
len = strlen(var); |
len = strlen(var); |
while (*ep != NULL) { |
for (ep = env.envp; *ep != NULL;) { |
if (strncmp(var, *ep, len) == 0 && (*ep)[len] == '=') { |
if (strncmp(var, *ep, len) == 0 && (*ep)[len] == '=') { |
/* Found it; shift remainder + NULL over by one and update len. */ |
/* Found it; shift remainder + NULL over by one. */ |
memmove(ep, ep + 1, |
char **cur = ep; |
(env.env_len - (ep - env.envp)) * sizeof(char *)); |
while ((*cur = *(cur + 1)) != NULL) |
env.env_len--; |
cur++; |
/* Keep going, could be multiple instances of the var. */ |
/* Keep going, could be multiple instances of the var. */ |
} else { |
} else { |
ep++; |
ep++; |
} |
} |
} |
} |
|
env.env_len = ep - env.envp; |
#ifndef UNSETENV_VOID |
#ifndef UNSETENV_VOID |
return(0); |
return(0); |
#endif |
#endif |
|
|
if (found && overwrite) { |
if (found && overwrite) { |
while (*ep != NULL) { |
while (*ep != NULL) { |
if (strncmp(str, *ep, len) == 0) { |
if (strncmp(str, *ep, len) == 0) { |
memmove(ep, ep + 1, |
char **cur = ep; |
(env.env_len - (ep - env.envp)) * sizeof(char *)); |
while ((*cur = *(cur + 1)) != NULL) |
env.env_len--; |
cur++; |
} else { |
} else { |
ep++; |
ep++; |
} |
} |
} |
} |
|
env.env_len = ep - env.envp; |
} |
} |
} |
} |
|
|