]> ruderich.org/simon Gitweb - coloredstderr/coloredstderr.git/commitdiff
Fix initialization if ENV_NAME_FDS was not set.
authorSimon Ruderich <simon@ruderich.org>
Sat, 1 Jun 2013 16:27:56 +0000 (18:27 +0200)
committerSimon Ruderich <simon@ruderich.org>
Sat, 1 Jun 2013 16:27:56 +0000 (18:27 +0200)
If ENV_NAME_FDS is not set then init_from_environment() was called for
each hooked function, instead of just once.

src/coloredstderr.c
src/trackfds.h

index f54b765109687b7a3201663f5defe105ba08fcef..3e5dac2c770ca1f44481529911effab60a7b092c 100644 (file)
@@ -39,6 +39,10 @@ static ssize_t (*real_write)(int, const void *, size_t);
 static int (*real_close)(int);
 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;
+
 
 #include "constants.h"
 #ifdef DEBUG
@@ -58,7 +62,7 @@ static int check_handle_fd(int fd) {
     }
 
     /* Load state from environment. Only necessary once per process. */
-    if (!tracked_fds) {
+    if (!initialized) {
         init_from_environment();
     }
 
@@ -73,7 +77,7 @@ static void dup_fd(int oldfd, int newfd) {
     debug("%d -> %d\t\t\t[%d]\n", oldfd, newfd, getpid());
 #endif
 
-    if (!tracked_fds) {
+    if (!initialized) {
         init_from_environment();
     }
     if (tracked_fds_count == 0) {
@@ -101,7 +105,7 @@ static void close_fd(int fd) {
     debug("%d -> .\t\t\t[%d]\n", fd, getpid());
 #endif
 
-    if (!tracked_fds) {
+    if (!initialized) {
         init_from_environment();
     }
 
index 474b072d2026d9eee0faeb4505529f2d06a2fa9f..e342b1223394e1a8fc9b4c28178ac44f478ddc3b 100644 (file)
@@ -34,6 +34,7 @@ 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) {
+    initialized = 1;
     tracked_fds_count = 0;
 
     const char *env = getenv(ENV_NAME_FDS);