X-Git-Url: https://ruderich.org/simon/gitweb/?p=coloredstderr%2Fcoloredstderr.git;a=blobdiff_plain;f=src%2Fcoloredstderr.c;h=a78fdd9a2e7ed377b36e56555d2de77f9fe1960a;hp=586b0240d3df19b3a70a3f4a1d0692e81a36345f;hb=afa1ef98fe940719c7085e93643185c6de94d300;hpb=0d7f3068981f2b08e583cec21d9069e97c73addd diff --git a/src/coloredstderr.c b/src/coloredstderr.c index 586b024..a78fdd9 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -406,7 +406,7 @@ HOOK_FUNC_DEF1(int, dup, int, oldfd) { DLSYM_FUNCTION(real_dup, "dup"); newfd = real_dup(oldfd); - if (newfd != -1) { + if (newfd > -1) { dup_fd(oldfd, newfd); } @@ -417,7 +417,7 @@ HOOK_FUNC_DEF2(int, dup2, int, oldfd, int, newfd) { DLSYM_FUNCTION(real_dup2, "dup2"); newfd = real_dup2(oldfd, newfd); - if (newfd != -1) { + if (newfd > -1) { dup_fd(oldfd, newfd); } @@ -428,7 +428,7 @@ HOOK_FUNC_DEF3(int, dup3, int, oldfd, int, newfd, int, flags) { DLSYM_FUNCTION(real_dup3, "dup3"); newfd = real_dup3(oldfd, newfd, flags); - if (newfd != -1) { + if (newfd > -1) { dup_fd(oldfd, newfd); } @@ -460,7 +460,7 @@ HOOK_FUNC_VAR_DEF2(int, fcntl, int, fd, int, cmd /*, ... */) { va_end(ap); /* We only care about duping fds. */ - if (cmd == F_DUPFD && result != -1) { + if (cmd == F_DUPFD && result > -1) { dup_fd(fd, result); } @@ -646,10 +646,16 @@ HOOK_FUNC_DEF2(int, execvp, char const *, file, char * const *, argv) { #ifdef HAVE_EXECVPE extern char **environ; int execvpe(char const *file, char * const argv[], char * const envp[]) { + int result; + char **old_environ = environ; + /* Fake the environment so we can reuse execvp(). */ environ = (char **)envp; /* execvp() updates the environment. */ - return execvp(file, argv); + result = execvp(file, argv); + + environ = old_environ; + return result; } #endif