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); } }