X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fcoloredstderr.c;h=b16633f8534b8b7d9a1e4fdc64532a185497c598;hb=ad50ad9c54dea706b45d63dd5fdf1e381158f83f;hp=3e5dac2c770ca1f44481529911effab60a7b092c;hpb=7d4d8e0784059412a7ab3dfdfe3ad011b894a6e4;p=coloredstderr%2Fcoloredstderr.git diff --git a/src/coloredstderr.c b/src/coloredstderr.c index 3e5dac2..b16633f 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -42,6 +42,8 @@ static size_t (*real_fwrite)(const void *, size_t, size_t, FILE *); /* Did we already (try to) parse the environment and setup the necessary * variables? */ static int initialized; +/* Force hooked writes even when not writing to a tty. Used for tests. */ +static int force_write_to_non_tty; #include "constants.h" @@ -56,16 +58,17 @@ static int initialized; /* Should the "action" handler be invoked for this file descriptor? */ static int check_handle_fd(int fd) { - /* Never touch anything not going to a terminal. */ - if (!isatty(fd)) { - return 0; - } - /* Load state from environment. Only necessary once per process. */ if (!initialized) { init_from_environment(); } + /* Never touch anything not going to a terminal - unless we are explicitly + * asked to do so. */ + if (!force_write_to_non_tty && !isatty(fd)) { + return 0; + } + if (tracked_fds_count == 0) { return 0; } @@ -227,6 +230,10 @@ HOOK_FILE1(int, putchar_unlocked, stdout, HOOK_FILE1(int, puts_unlocked, stdout, const char *, s) +/* perror(3) */ +HOOK_VOID1(void, perror, STDERR_FILENO, + const char *, s) + /* Hook functions which duplicate file descriptors to track them. */