Add COLORED_STDERR_IGNORED_BINARIES to exclude binaries.

This commit is contained in:
Simon Ruderich
2013-07-07 13:33:44 +02:00
parent 9ff0ffbd28
commit b950cdb792
5 changed files with 77 additions and 0 deletions

View File

@@ -25,6 +25,7 @@
#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"
#define ENV_NAME_IGNORED_BINARIES "COLORED_STDERR_IGNORED_BINARIES"
#define ENV_NAME_PRIVATE_FDS "COLORED_STDERR_PRIVATE_FDS"
/* Strings written before/after each matched function. */

View File

@@ -50,6 +50,36 @@ static void tracked_fds_debug(void) {
}
#endif
/* Check if filename occurs in the comma-separated list ignore. */
static int is_program_ignored(char const *filename, char const *ignore) {
size_t length;
size_t filename_length = strlen(filename);
#ifdef DEBUG
debug(" is_program_ignored(\"%s\", \"%s\")\n", filename, ignore);
#endif
for (; *ignore; ignore += length) {
while (*ignore == ',') {
ignore++;
}
length = strcspn(ignore, ",");
if (length == 0) {
break;
}
if (length != filename_length) {
continue;
}
if (!strncmp(filename, ignore, length)) {
return 1;
}
}
return 0;
}
static int init_tracked_fds_list(size_t count) {
assert(count > 0);
@@ -88,6 +118,22 @@ static void init_from_environment(void) {
initialized = 1;
tracked_fds_list_count = 0;
/* Don't color writes to stderr for this binary (and its children) if it's
* contained in the comma-separated list in ENV_NAME_IGNORED_BINARIES. */
env = getenv(ENV_NAME_IGNORED_BINARIES);
if (env) {
char path[512];
/* TODO: Don't require /proc/. */
ssize_t written = readlink("/proc/self/exe", path, sizeof(path) - 1);
if (written > 0) {
path[written] = 0; /* readlink() does not null-terminate! */
if (is_program_ignored(path, env)) {
return;
}
}
}
/* 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);