aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--environ.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/environ.c b/environ.c
index d855f8b5..31e57e0e 100644
--- a/environ.c
+++ b/environ.c
@@ -195,19 +195,11 @@ environ_update(const char *vars, struct environ *srcenv,
void
environ_push(struct environ *env)
{
- struct environ_entry *envent;
- char *v;
-
- while (*environ != NULL) {
- v = xstrdup(*environ);
- v[strcspn(v, "=")] = '\0';
-
- unsetenv(v);
- free(v);
- }
+ struct environ_entry *envent;
+ environ = xcalloc(1, sizeof *environ);
RB_FOREACH(envent, environ, env) {
- if (envent->value != NULL)
+ if (envent->value != NULL && *envent->name != '\0')
setenv(envent->name, envent->value, 1);
}
}