const char *name, const char *value);
-extern int env_list_setenv(struct ul_env_list *ls);
+extern int env_list_setenv(struct ul_env_list *ls, int overwrite);
extern void env_list_free(struct ul_env_list *ls);
extern struct ul_env_list *env_from_fd(int pid);
/*
* Use setenv() for all stuff in @ls.
*/
-int env_list_setenv(struct ul_env_list *ls)
+int env_list_setenv(struct ul_env_list *ls, int overwrite)
{
int rc = 0;
while (ls && rc == 0) {
if (ls->name && ls->value)
- rc = setenv(ls->name, ls->value, 0);
+ rc = setenv(ls->name, ls->value, overwrite);
ls = ls->next;
}
return rc;
}
/* restore removed */
- env_list_setenv(removed);
+ env_list_setenv(removed, 0);
/* check restore */
for (bad = forbid; *bad; bad++) {
/* restore "bad" environment variables */
if (envs_removed) {
- env_list_setenv(envs_removed);
+ env_list_setenv(envs_removed, 0);
env_list_free(envs_removed);
envs_removed = NULL;
}
if ((envls = env_from_fd(env_fd)) == NULL)
err(EXIT_FAILURE, _("failed to get environment variables"));
clearenv();
- if (env_list_setenv(envls) < 0)
+ if (env_list_setenv(envls, 0) < 0)
err(EXIT_FAILURE, _("failed to set environment variables"));
env_list_free(envls);
close(env_fd);
/* restore "bad" environment variables */
if (envs_removed) {
- env_list_setenv(envs_removed);
+ env_list_setenv(envs_removed, 0);
env_list_free(envs_removed);
envs_removed = NULL;
}