X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=daemon.c;h=316432e68a5f116c9f2035d9bfb661b99b7061a1;hp=d8b8519e42cbf20f32bdcde30055a807793e8c7a;hb=3943f98061a55f373991ecb2e4429ec02baf0555;hpb=6ceaf430c5d331db83b591ae02d9eef5c87a31df 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. *