]> ruderich.org/simon Gitweb - coloredstderr/coloredstderr.git/blobdiff - src/trackfds.h
coloredstderr.c: Use #include <config.h>.
[coloredstderr/coloredstderr.git] / src / trackfds.h
index 476093818a5dae4aabe2b1c1e50c7680124e18a1..5896cbb4ee3eb223db010131253bb609d45de774 100644 (file)
@@ -66,10 +66,8 @@ static void init_from_environment(void) {
         return;
     }
     /* Environment is read-only. */
-    char *env_copy = strdup(env);
-    if (!env_copy) {
-        return;
-    }
+    char env_copy[strlen(env) + 1];
+    strcpy(env_copy, env);
 
     char *x;
 
@@ -83,7 +81,6 @@ static void init_from_environment(void) {
 
     tracked_fds = malloc(tracked_fds_space * sizeof(*tracked_fds));
     if (!tracked_fds) {
-        free(env_copy);
         return;
     }
 
@@ -114,26 +111,12 @@ static void init_from_environment(void) {
 
     tracked_fds_count = count;
 
-    free(env_copy);
-
 #ifdef DEBUG
     tracked_fds_debug();
 #endif
 }
 
-static void update_environment(void) {
-#ifdef DEBUG
-    debug("update_environment()\t\t[%d]\n", getpid());
-#endif
-
-    /* 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
-     * skipped. */
-    char env[tracked_fds_count * (10 + 1) + 1 /* to fit '\0' */ ];
-    env[0] = 0;
-
-    char *x = env;
-
+static void update_environment_buffer(char *x) {
     size_t i;
     for (i = 0; i < tracked_fds_count; i++) {
         int length = snprintf(x, 10 + 1, "%d", tracked_fds[i]);
@@ -148,6 +131,28 @@ static void update_environment(void) {
         /* Make sure the string is always zero terminated. */
         *x = 0;
     }
+}
+inline static size_t update_environment_buffer_size(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
+     * skipped. */
+    return tracked_fds_count * (10 + 1) + 1 /* to fit '\0' */;
+}
+static void update_environment(void) {
+#ifdef DEBUG
+    debug("update_environment()\t\t[%d]\n", getpid());
+#endif
+
+    /* If we haven't parsed the environment we also haven't modified it - so
+     * nothing to do. */
+    if (!initialized) {
+        return;
+    }
+
+    char env[update_environment_buffer_size()];
+    env[0] = 0;
+
+    update_environment_buffer(env);
 
 #if 0
     debug("    setenv('%s', '%s', 1)\n", ENV_NAME_FDS, env);