X-Git-Url: https://ruderich.org/simon/gitweb/?p=coloredstderr%2Fcoloredstderr.git;a=blobdiff_plain;f=src%2Fcoloredstderr.c;h=66467b402e14d0a95b630dea38e1e3d59a77a7d7;hp=15581a622c30f15d437cd982244d88498ac45803;hb=d49cd5d92a07d708ddcb3c29cad67403cf8eb836;hpb=2fc66e15eb194ca1e54cd4df7f54bfdc3c87a3cd diff --git a/src/coloredstderr.c b/src/coloredstderr.c index 15581a6..66467b4 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -238,6 +238,14 @@ HOOK_FILE2(int, fputc, stream, int, c, FILE *, stream) HOOK_FILE2(int, putc, stream, int, c, FILE *, stream) +/* The glibc uses a macro for putc() which expands to _IO_putc(). However + * sometimes the raw putc() is used as well, not sure why. Make sure to hook + * it too. */ +#ifdef putc +# undef putc +HOOK_FILE2(int, putc, stream, + int, c, FILE *, stream) +#endif HOOK_FILE1(int, putchar, stdout, int, c) HOOK_FILE1(int, puts, stdout, @@ -646,10 +654,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