diff options
Diffstat (limited to 'guts')
-rw-r--r-- | guts/execv.c | 8 | ||||
-rw-r--r-- | guts/execve.c | 11 | ||||
-rw-r--r-- | guts/execvp.c | 8 |
3 files changed, 21 insertions, 6 deletions
diff --git a/guts/execv.c b/guts/execv.c index 3fec52a..59a3f96 100644 --- a/guts/execv.c +++ b/guts/execv.c @@ -6,7 +6,13 @@ * wrap_execv(const char *path, char *const *argv) { * int rc = -1; */ - environ = pseudo_setupenv(environ, getenv("PSEUDO_OPTS")); + + if (!pseudo_get_value("PSEUDO_RELOADED")) + pseudo_setupenv(); + else { + pseudo_setupenv(); + pseudo_dropenv(); + } rc = real_execv(path, argv); diff --git a/guts/execve.c b/guts/execve.c index 2bad0bf..7cb6632 100644 --- a/guts/execve.c +++ b/guts/execve.c @@ -14,10 +14,13 @@ * design will likely be revisited. */ pseudo_client_op(OP_EXEC, PSA_EXEC, -1, -1, filename, 0); - if (!getenv("PSEUDO_RELOADED")) - new_environ = pseudo_setupenv(envp, getenv("PSEUDO_OPTS")); - else - new_environ = envp; + if (!pseudo_get_value("PSEUDO_RELOADED")) + new_environ = pseudo_setupenvp(envp); + else { + new_environ = pseudo_setupenvp(envp); + new_environ = pseudo_dropenvp(new_environ); + } + rc = real_execve(filename, argv, new_environ); /* return rc; diff --git a/guts/execvp.c b/guts/execvp.c index 64e4b4b..1ab34d3 100644 --- a/guts/execvp.c +++ b/guts/execvp.c @@ -6,7 +6,13 @@ * wrap_execvp(const char *file, char *const *argv) { * int rc = -1; */ - environ = pseudo_setupenv(environ, getenv("PSEUDO_OPTS")); + + if (!pseudo_get_value("PSEUDO_RELOADED")) + pseudo_setupenv(); + else { + pseudo_setupenv(); + pseudo_dropenv(); + } rc = real_execvp(file, argv); |