X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fcoloredstderr.c;h=10b83be2db01d074bb5b5f5255ecbc5aeda1a805;hb=96710bc3fa919e221338ef96686e80ba590d3b77;hp=f54b765109687b7a3201663f5defe105ba08fcef;hpb=5e162a33ae8a80eebaf3792a962cb6ecc0950bda;p=coloredstderr%2Fcoloredstderr.git diff --git a/src/coloredstderr.c b/src/coloredstderr.c index f54b765..10b83be 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -39,6 +39,12 @@ static ssize_t (*real_write)(int, const void *, size_t); static int (*real_close)(int); 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" #ifdef DEBUG @@ -52,16 +58,17 @@ static size_t (*real_fwrite)(const void *, size_t, size_t, FILE *); /* 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 (!tracked_fds) { + 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; } @@ -73,7 +80,7 @@ static void dup_fd(int oldfd, int newfd) { debug("%d -> %d\t\t\t[%d]\n", oldfd, newfd, getpid()); #endif - if (!tracked_fds) { + if (!initialized) { init_from_environment(); } if (tracked_fds_count == 0) { @@ -101,7 +108,7 @@ static void close_fd(int fd) { debug("%d -> .\t\t\t[%d]\n", fd, getpid()); #endif - if (!tracked_fds) { + if (!initialized) { init_from_environment(); }