From 6f9428b6c49ad3b8e33a2baab20d00fa8233375e Mon Sep 17 00:00:00 2001 From: Steven Schubiger Date: Sat, 21 Sep 2019 22:25:53 +0200 Subject: Fix using color from config with hyphen --- colorize.c | 18 +++++++++++------- t/conf/color.t | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/colorize.c b/colorize.c index adb2408..ac4ee9a 100644 --- a/colorize.c +++ b/colorize.c @@ -956,7 +956,7 @@ free_conf (struct conf *config) static void process_args (unsigned int arg_cnt, char **arg_strings, char *attr, const struct color **colors, const char **file, FILE **stream, struct conf *config) { - bool use_conf_color; + bool has_hyphen, use_conf_color; int ret; char *p; struct stat sb; @@ -971,23 +971,27 @@ process_args (unsigned int arg_cnt, char **arg_strings, char *attr, const struct assert (color_string != NULL); - if (streq (color_string, "-")) + has_hyphen = streq (color_string, "-"); + + if (has_hyphen) { if (file_string) vfprintf_fail (formats[FMT_GENERIC], "hyphen cannot be used as color string"); - else + else if (!config->color) vfprintf_fail (formats[FMT_GENERIC], "hyphen must be preceded by color string"); } - if ((ret = lstat (color_string, &sb)) == 0) /* exists */ + if (!has_hyphen && (ret = lstat (color_string, &sb)) == 0) /* exists */ /* Ensure that we don't fail if there's a file with one or more color names in its path. */ use_conf_color = skip_path_colors (color_string, file_string, &sb, !!config->color); + else if (has_hyphen) + use_conf_color = true; + else + use_conf_color = false; /* Use color from config file. */ - if (arg_cnt == 1 - && (access (color_string, F_OK) != -1) - && use_conf_color) + if (arg_cnt == 1 && use_conf_color) { file_string = color_string; color_string = config->color; diff --git a/t/conf/color.t b/t/conf/color.t index 3adfd5b..fc3ab71 100755 --- a/t/conf/color.t +++ b/t/conf/color.t @@ -8,7 +8,7 @@ use Colorize::Common qw(:defaults $write_to_tmpfile); use File::Temp qw(tmpnam); use Test::More; -my $tests = 3; +my $tests = 4; plan tests => $tests; @@ -24,7 +24,8 @@ SKIP: { print {$fh} "color=green\n"; close($fh); - is(qx($program $infile), "\e[32mfoo\e[0m", 'color from config'); + is(qx(printf %s "foo" | $program -), "\e[32mfoo\e[0m", 'color from config (stdin)'); + is(qx($program $infile), "\e[32mfoo\e[0m", 'color from config (file)'); is(qx(printf %s "foo" | $program none/none), 'foo', 'read from stdin'); is(qx($program none/none $infile), 'foo', 'read from file'); -- cgit v1.2.3