Add assert()s.
authorSimon Ruderich <simon@ruderich.org>
Thu, 13 Jun 2013 19:33:27 +0000 (21:33 +0200)
committerSimon Ruderich <simon@ruderich.org>
Thu, 13 Jun 2013 19:33:27 +0000 (21:33 +0200)
README
src/coloredstderr.c
src/trackfds.h

diff --git a/README b/README
index e00fdfaf2be4186fa4cafdabed62511049ecf06c..6bedd742c33faf44818ec01e06029d20f8cc19ec 100644 (file)
--- 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
index b7e71e17871d6f7c7411c4c922d48cfcb2530680..7c4a5f5010cc42163ca10e8de75a34cb1ea32da1 100644 (file)
 /* 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 <assert.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <stdarg.h>
@@ -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();
     }
index f84e20daee373c405c9b95642e4306232123245a..b9089bbd25b0444772c6442ca27dedd3ac7e4334 100644 (file)
@@ -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;
     }