mirror of
https://github.com/FAUSheppy/colorredstderr-mirror
synced 2025-12-09 16:38:32 +01:00
Add ENV_NAME_FORCE_WRITE to force writes to non-tty devices.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#define ENV_NAME_FDS "COLORED_STDERR_FDS"
|
||||
#define ENV_NAME_PRE_STRING "COLORED_STDERR_PRE"
|
||||
#define ENV_NAME_POST_STRING "COLORED_STDERR_POST"
|
||||
#define ENV_NAME_FORCE_WRITE "COLORED_STDERR_FORCE_WRITE"
|
||||
|
||||
/* Strings written before/after each matched function. */
|
||||
#define DEFAULT_PRE_STRING "\e[91m"
|
||||
|
||||
@@ -34,10 +34,19 @@ static size_t tracked_fds_space;
|
||||
* ENV_NAME_FDS has the following format: Each descriptor as string followed
|
||||
* by a comma; there's a trailing comma. Example: "2,4,". */
|
||||
static void init_from_environment(void) {
|
||||
const char *env;
|
||||
|
||||
initialized = 1;
|
||||
tracked_fds_count = 0;
|
||||
|
||||
const char *env = getenv(ENV_NAME_FDS);
|
||||
/* If ENV_NAME_FORCE_WRITE is set and not empty, allow writes to a non-tty
|
||||
* device. Use with care! Mainly used for the test suite. */
|
||||
env = getenv(ENV_NAME_FORCE_WRITE);
|
||||
if (env && env[0] != '\0') {
|
||||
force_write_to_non_tty = 1;
|
||||
}
|
||||
|
||||
env = getenv(ENV_NAME_FDS);
|
||||
if (!env) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user