X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Ftrackfds.h;h=b26059da533d8119e96551f80acac5bdf3101df0;hb=686bf50bcd4ac12d2825dc9d18d6ca944f158eb5;hp=474b072d2026d9eee0faeb4505529f2d06a2fa9f;hpb=b9b86029be18bd02cb7c4396c364e372488d2faa;p=coloredstderr%2Fcoloredstderr.git diff --git a/src/trackfds.h b/src/trackfds.h index 474b072..b26059d 100644 --- a/src/trackfds.h +++ b/src/trackfds.h @@ -34,9 +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; } @@ -95,15 +105,17 @@ static void init_from_environment(void) { static void update_environment(void) { /* An integer (32-bit) has at most 10 digits, + 1 for the comma after each * number. Bigger file descriptors (which shouldn't occur in reality) are - * truncated. */ + * skipped. */ char env[tracked_fds_count * (10 + 1) * sizeof(char)]; char *x = env; size_t i; for (i = 0; i < tracked_fds_count; i++) { int length = snprintf(x, 10 + 1, "%d", tracked_fds[i]); - if (length >= 10 + 1) - return; + if (length >= 10 + 1) { + /* Integer too bit to fit the buffer, skip it. */ + continue; + } /* Write comma after number. */ x += length;