version 1.7, 2015/01/25 16:53:46 |
version 1.8, 2015/05/07 07:35:31 |
|
|
void |
void |
environ_push(struct environ *env) |
environ_push(struct environ *env) |
{ |
{ |
ARRAY_DECL(, char *) varlist; |
struct environ_entry *envent; |
struct environ_entry *envent; |
char **vp, *v; |
char **varp, *var; |
|
u_int i; |
|
|
|
ARRAY_INIT(&varlist); |
for (vp = environ; *vp != NULL; vp++) { |
for (varp = environ; *varp != NULL; varp++) { |
v = xstrdup(*vp); |
var = xstrdup(*varp); |
v[strcspn(v, "=")] = '\0'; |
var[strcspn(var, "=")] = '\0'; |
|
ARRAY_ADD(&varlist, var); |
unsetenv(v); |
|
free(v); |
} |
} |
for (i = 0; i < ARRAY_LENGTH(&varlist); i++) { |
|
var = ARRAY_ITEM(&varlist, i); |
|
unsetenv(var); |
|
free(var); |
|
} |
|
ARRAY_FREE(&varlist); |
|
|
|
RB_FOREACH(envent, environ, env) { |
RB_FOREACH(envent, environ, env) { |
if (envent->value != NULL) |
if (envent->value != NULL) |