daemon: Introduce daemon_init_colors_or_die().
authorAndre Noll <maan@tuebingen.mpg.de>
Tue, 7 Oct 2014 16:16:14 +0000 (16:16 +0000)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 8 Feb 2015 14:58:14 +0000 (15:58 +0100)
The log color logic is already contained in para_server and
para_audiod. Let's use a single function in daemon.c for this
purpose.

daemon_set_default_log_colors() and daemon_set_log_color_or_die()
can be made static since they are only called from daemon.c now.

audiod.c
daemon.c
daemon.h
server.c

index fafbde5..77d21f3 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -310,17 +310,6 @@ empty:
        return para_strdup(NULL);
 }
 
-static int want_colors(void)
-{
-       if (conf.color_arg == color_arg_no)
-               return 0;
-       if (conf.color_arg == color_arg_yes)
-               return 1;
-       if (conf.logfile_given)
-               return 0;
-       return isatty(STDERR_FILENO);
-}
-
 static void parse_config_or_die(void)
 {
        int ret;
@@ -1359,18 +1348,6 @@ __noreturn static void print_help_and_die(void)
        exit(0);
 }
 
-static void init_colors_or_die(void)
-{
-       int i;
-
-       if (!want_colors())
-               return;
-       daemon_set_default_log_colors();
-       daemon_set_flag(DF_COLOR_LOG);
-       for (i = 0; i < conf.log_color_given; i++)
-               daemon_set_log_color_or_die(conf.log_color_arg[i]);
-}
-
 /**
  * the main function of para_audiod
  *
@@ -1405,7 +1382,8 @@ int main(int argc, char *argv[])
                print_help_and_die();
        daemon_drop_privileges_or_die(conf.user_arg, conf.group_arg);
        parse_config_or_die();
-       init_colors_or_die();
+       daemon_init_colors_or_die(conf.color_arg, color_arg_auto, color_arg_no,
+               conf.logfile_given, conf.log_color_arg, conf.log_color_given);
        init_random_seed_or_die();
        daemon_set_flag(DF_LOG_TIME);
        daemon_set_flag(DF_LOG_HOSTNAME);
index d8b8519..316432e 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -37,12 +37,7 @@ struct daemon {
 
 static struct daemon the_daemon, *me = &the_daemon;
 
-/**
- * Activate default log colors.
- *
- * This should be called early if color support is wanted.
- */
-void daemon_set_default_log_colors(void)
+static void daemon_set_default_log_colors(void)
 {
        int i;
        static const char *default_log_colors[NUM_LOGLEVELS] = {
@@ -58,14 +53,12 @@ void daemon_set_default_log_colors(void)
                color_parse_or_die(default_log_colors[i], me->log_colors[i]);
 }
 
-/**
+/*
  * Set the color for one loglevel.
  *
- * \param arg The loglevel/color specifier.
- *
- * \a arg must be of the form "ll:[fg [bg]] [attr]".
+ * arg must be of the form "ll:[fg [bg]] [attr]".
  */
-void daemon_set_log_color_or_die(char const *arg)
+static void daemon_set_log_color_or_die(char const *arg)
 {
        char *p = strchr(arg, ':');
        int ret, ll;
@@ -84,6 +77,45 @@ err:
        exit(EXIT_FAILURE);
 }
 
+/**
+ * Initialize color mode if necessary.
+ *
+ * \param color_arg The argument given to --color.
+ * \param color_arg_auto The value for automatic color detection.
+ * \param color_arg_no The value to disable colored log messages.
+ * \param logfile_given In auto mode colors are disabled if this value is true.
+ * \param log_color_argv Color specifiers given to --log-color.
+ * \param argc Number of color specifiers in \a log_color_argv.
+ *
+ * If \a color_arg equals \a color_arg_no, color mode is disabled, i.e., calls
+ * to \a para_log() will not produce colored output. If \a color_arg == \a
+ * color_arg_auto, the function autodetects whether to activate colors.
+ * Otherwise color mode is enabled.
+ *
+ * If color mode is to be enabled, the strings in \a log_color_argv are parsed
+ * and the color scheme is updated accordingly. For each loglevel, the default
+ * colors apply if there is no log_color_argv for this loglevel.
+ */
+void daemon_init_colors_or_die(int color_arg, int color_arg_auto,
+               int color_arg_no, bool logfile_given, char **log_color_argv,
+               int argc)
+{
+       int i;
+
+       if (color_arg == color_arg_no)
+               return;
+       if (color_arg == color_arg_auto) {
+               if (logfile_given)
+                       return;
+               if (!isatty(STDERR_FILENO))
+                       return;
+       }
+       daemon_set_flag(DF_COLOR_LOG);
+       daemon_set_default_log_colors();
+       for (i = 0; i < argc; i++)
+               daemon_set_log_color_or_die(log_color_argv[i]);
+}
+
 /**
  * Init or change the name of the log file.
  *
index 42ff5ce..ca3da14 100644 (file)
--- a/daemon.h
+++ b/daemon.h
@@ -12,8 +12,9 @@ __malloc char *daemon_get_uptime_str(const struct timeval *current_time);
 void daemon_set_logfile(char *logfile_name);
 void daemon_set_flag(unsigned flag);
 void daemon_set_loglevel(char *loglevel);
-void daemon_set_default_log_colors(void);
-void daemon_set_log_color_or_die(char const *arg);
+void daemon_init_colors_or_die(int color_arg, int color_arg_auto,
+               int color_arg_no, bool logfile_given, char **log_color_argv,
+               int argc);
 __printf_2_3 void daemon_log(int ll, const char* fmt,...);
 
 /** Daemon log configuration flags. */
index 97a1720..6c2cbb8 100644 (file)
--- a/server.c
+++ b/server.c
@@ -126,29 +126,6 @@ char *server_get_tasks(void)
        return get_task_list(&sched);
 }
 
-static int want_colors(void)
-{
-       if (conf.color_arg == color_arg_no)
-               return 0;
-       if (conf.color_arg == color_arg_yes)
-               return 1;
-       if (conf.logfile_given)
-               return 0;
-       return isatty(STDERR_FILENO);
-}
-
-static void init_colors_or_die(void)
-{
-       int i;
-
-       if (!want_colors())
-               return;
-       daemon_set_flag(DF_COLOR_LOG);
-       daemon_set_default_log_colors();
-       for (i = 0; i < conf.log_color_given; i++)
-               daemon_set_log_color_or_die(conf.log_color_arg[i]);
-}
-
 /*
  * setup shared memory area and get mutex for locking
  */
@@ -231,7 +208,9 @@ void parse_config_or_die(int override)
                daemon_set_logfile(conf.logfile_arg);
                daemon_open_log_or_die();
        }
-       init_colors_or_die();
+
+       daemon_init_colors_or_die(conf.color_arg, color_arg_auto, color_arg_no,
+               conf.logfile_given, conf.log_color_arg, conf.log_color_given);
        daemon_set_flag(DF_LOG_PID);
        daemon_set_flag(DF_LOG_LL);
        daemon_set_flag(DF_LOG_TIME);