From 6d6ad4423ae87771bd44f90006a648ec03931961 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Thu, 13 Jun 2013 21:33:27 +0200 Subject: [PATCH] Add assert()s. --- README | 6 +++++- src/coloredstderr.c | 12 ++++++++++++ src/trackfds.h | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/README b/README index e00fdfa..6bedd74 100644 --- a/README +++ b/README @@ -73,8 +73,12 @@ DEBUG To enable debug mode, configure coloredstderr with '--enable-debug'. +*Important:* Debug mode enables `assert()`s in the code which might abort the +process if an error condition is detected! + Debug mode is slower than normal mode. To log only warnings without the -overhead of debug mode use '--enable-warnings'. +overhead of debug mode use '--enable-warnings'. `assert()`s are not enabled +with '--enable-warnings', so it's safe to use. Debug messages are written to the file `colored_stderr_debug_log.txt` in the current working directory _if_ it exists. If it exists debug messages are diff --git a/src/coloredstderr.c b/src/coloredstderr.c index b7e71e1..7c4a5f5 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -25,6 +25,12 @@ /* Must be loaded before the following headers. */ #include "ldpreload.h" +/* Disable assert()s if not compiled with --enable-debug. */ +#ifndef DEBUG +# define NDEBUG +#endif + +#include #include #include #include @@ -78,6 +84,8 @@ static int force_write_to_non_tty; * additional call. */ static int isatty_noinline(int fd) noinline; static int isatty_noinline(int fd) { + assert(fd >= 0); + int saved_errno = errno; int result = isatty(fd); errno = saved_errno; @@ -91,6 +99,8 @@ static void dup_fd(int oldfd, int newfd) { debug("%3d -> %3d\t\t\t[%d]\n", oldfd, newfd, getpid()); #endif + assert(oldfd >= 0 && newfd >= 0); + if (unlikely(!initialized)) { init_from_environment(); } @@ -113,6 +123,8 @@ static void close_fd(int fd) { debug("%3d -> .\t\t\t[%d]\n", fd, getpid()); #endif + assert(fd >= 0); + if (unlikely(!initialized)) { init_from_environment(); } diff --git a/src/trackfds.h b/src/trackfds.h index f84e20d..b9089bb 100644 --- a/src/trackfds.h +++ b/src/trackfds.h @@ -51,6 +51,8 @@ static void tracked_fds_debug(void) { #endif static int init_tracked_fds_list(size_t count) { + assert(count > 0); + /* Reduce reallocs. */ count += TRACKFDS_REALLOC_STEP; @@ -164,6 +166,8 @@ next: } static char *update_environment_buffer_entry(char *x, int fd) { + assert(fd >= 0); + int length = snprintf(x, 10 + 1, "%d", fd); if (length >= 10 + 1) { /* Integer too big to fit the buffer, skip it. */ @@ -183,6 +187,8 @@ static char *update_environment_buffer_entry(char *x, int fd) { return x; } static void update_environment_buffer(char *x) { + assert(initialized); + size_t i; for (i = 0; i < TRACKFDS_STATIC_COUNT; i++) { if (tracked_fds[i]) { @@ -194,6 +200,8 @@ static void update_environment_buffer(char *x) { } } inline static size_t update_environment_buffer_size(void) { + assert(initialized); + /* Use the maximum count (TRACKFDS_STATIC_COUNT) of used descriptors * because it's simple and small enough not to be a problem. * @@ -229,6 +237,8 @@ static void update_environment(void) { static void tracked_fds_add(int fd) { + assert(fd >= 0); + if (fd < TRACKFDS_STATIC_COUNT) { tracked_fds[fd] = 1; #if 0 @@ -269,6 +279,8 @@ static void tracked_fds_add(int fd) { #endif } static int tracked_fds_remove(int fd) { + assert(fd >= 0); + if (fd < TRACKFDS_STATIC_COUNT) { int old_value = tracked_fds[fd]; tracked_fds[fd] = 0; @@ -314,6 +326,8 @@ static int tracked_fds_find_slow(int fd) noinline; */ inline static int tracked_fds_find(int fd) always_inline; static int tracked_fds_find(int fd) { + assert(fd >= 0); + if (fd < TRACKFDS_STATIC_COUNT) { return tracked_fds[fd]; } @@ -321,6 +335,8 @@ static int tracked_fds_find(int fd) { return tracked_fds_find_slow(fd); } static int tracked_fds_find_slow(int fd) { + assert(initialized); + if (tracked_fds_list_count == 0) { return 0; } -- 2.45.2