From 3943f98061a55f373991ecb2e4429ec02baf0555 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Tue, 7 Oct 2014 16:16:14 +0000 Subject: [PATCH] daemon: Introduce daemon_init_colors_or_die(). 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 | 26 ++------------------------ daemon.c | 54 +++++++++++++++++++++++++++++++++++++++++++----------- daemon.h | 5 +++-- server.c | 27 +++------------------------ 4 files changed, 51 insertions(+), 61 deletions(-) diff --git a/audiod.c b/audiod.c index fafbde51..77d21f37 100644 --- 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); diff --git a/daemon.c b/daemon.c index d8b8519e..316432e6 100644 --- 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. * diff --git a/daemon.h b/daemon.h index 42ff5ce1..ca3da140 100644 --- 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. */ diff --git a/server.c b/server.c index 97a17205..6c2cbb87 100644 --- 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); -- 2.39.5