]> git.refcnt.org Git - colorize.git/blobdiff - colorize.c
Move conf file path code to a function
[colorize.git] / colorize.c
index 1638f5f24ee959099f0e8f5153555717a6ffa117..fc5bd90c3ebe78d79de99e3d1715ccc3cd9ca22d 100644 (file)
@@ -285,6 +285,7 @@ static const char *program_name;
 static void print_tstamp (FILE *);
 #endif
 static void process_opts (int, char **, char **);
+static void conf_file_path (char **);
 static void process_opt_attr (const char *, const bool);
 static void write_attr (const struct attr *, unsigned int *, const bool);
 static void process_opt_exclude_random (const char *, const bool);
@@ -379,25 +380,7 @@ main (int argc, char **argv)
     conf_file = to_str (CONF_FILE_TEST);
 #elif !defined(TEST)
     if (conf_file == NULL)
-      {
-        uid_t uid;
-        struct passwd *passwd;
-        size_t size;
-
-        uid = getuid ();
-        errno = 0;
-        if ((passwd = getpwuid (uid)) == NULL)
-          {
-            if (errno == 0)
-              vfprintf_diag ("password file entry for uid %lu not found", (unsigned long)uid);
-            else
-              perror ("getpwuid");
-            exit (EXIT_FAILURE);
-          }
-        size = strlen (passwd->pw_dir) + 1 + strlen (CONF_FILE) + 1;
-        conf_file = xmalloc (size);
-        snprintf (conf_file, size, "%s/%s", passwd->pw_dir, CONF_FILE);
-      }
+      conf_file_path (&conf_file);
     else
       {
         char *s;
@@ -555,6 +538,31 @@ process_opts (int argc, char **argv, char **conf_file)
       }
 }
 
+static void
+conf_file_path (char **conf_file)
+{
+    char *path;
+    uid_t uid;
+    struct passwd *passwd;
+    size_t size;
+
+    uid = getuid ();
+    errno = 0;
+    if ((passwd = getpwuid (uid)) == NULL)
+      {
+        if (errno == 0)
+          vfprintf_diag ("password file entry for uid %lu not found", (unsigned long)uid);
+        else
+          perror ("getpwuid");
+        exit (EXIT_FAILURE);
+      }
+    size = strlen (passwd->pw_dir) + 1 + strlen (CONF_FILE) + 1;
+    path = xmalloc (size);
+    snprintf (path, size, "%s/%s", passwd->pw_dir, CONF_FILE);
+
+    *conf_file = path;
+}
+
 static void
 process_opt_attr (const char *p, const bool is_opt)
 {
@@ -628,8 +636,7 @@ process_opt_exclude_random (const char *s, const bool is_opt)
 {
     bool valid = false;
     unsigned int i;
-    if (exclude)
-      RELEASE_VAR (exclude);
+    RELEASE_VAR (exclude);
     exclude = xstrdup (s);
     STACK_VAR (exclude);
     for (i = 1; i < tables[GENERIC].count - 1; i++) /* skip color none and default */
@@ -745,29 +752,22 @@ parse_conf (const char *conf_file, struct conf *config)
     fclose (conf);
 }
 
+#define ASSIGN_CONF(str,val) do { \
+    free (str);                   \
+    str = val;                    \
+} while (false)
+
 static void
 assign_conf (const char *conf_file, struct conf *config, const char *cfg, char *val)
 {
     if (streq (cfg, "attr"))
-      {
-        free (config->attr);
-        config->attr = val;
-      }
+      ASSIGN_CONF (config->attr, val);
     else if (streq (cfg, "color"))
-      {
-        free (config->color);
-        config->color = val;
-      }
+      ASSIGN_CONF (config->color, val);
     else if (streq (cfg, "exclude-random"))
-      {
-        free (config->exclude_random);
-        config->exclude_random = val;
-      }
+      ASSIGN_CONF (config->exclude_random, val);
     else if (streq (cfg, "omit-color-empty"))
-      {
-        free (config->omit_color_empty);
-        config->omit_color_empty = val;
-      }
+      ASSIGN_CONF (config->omit_color_empty, val);
     else
       vfprintf_fail (formats[FMT_CONF], conf_file, cfg, "not recognized");
 }
@@ -786,7 +786,7 @@ init_conf_vars (const struct conf *config)
         else if (streq (config->omit_color_empty, "no"))
           omit_color_empty = false;
         else
-          vfprintf_fail ("omit-color-empty conf option is not valid");
+          vfprintf_fail (formats[FMT_GENERIC], "omit-color-empty conf option is not valid");
       }
 }