X-Git-Url: http://git.refcnt.org/?p=colorize.git;a=blobdiff_plain;f=colorize.c;h=8a1cb5236adc3edd3e268afe70acef24eab4a658;hp=50011e29615c986320137e200fa33e5ad801d07b;hb=048936d2b0358ba184b5380751744b8516fd74d1;hpb=eace71293190208f443973a9e385ca69da504863 diff --git a/colorize.c b/colorize.c index 50011e2..8a1cb52 100644 --- a/colorize.c +++ b/colorize.c @@ -218,7 +218,7 @@ static const struct { }; static unsigned int opts_set; -enum { +enum opt_set { OPT_ATTR_SET = 0x01, OPT_EXCLUDE_RANDOM_SET = 0x02, OPT_OMIT_COLOR_EMPTY_SET = 0x04 @@ -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; @@ -429,14 +412,21 @@ main (int argc, char **argv) if (clean && clean_all) vfprintf_fail (formats[FMT_GENERIC], "--clean and --clean-all switch are mutually exclusive"); if (arg_cnt > 1) - { - const char *const format = "%s %s"; - const char *const message = "switch cannot be used with more than one file"; - if (clean) - vfprintf_fail (format, "--clean", message); - else if (clean_all) - vfprintf_fail (format, "--clean-all", message); - } + vfprintf_fail ("--clean%s switch cannot be used with more than one file", clean_all ? "-all" : ""); + { + unsigned int i; + const struct option_set { + const char *option; + enum opt_set set; + } options[] = { + { "attr", OPT_ATTR_SET }, + { "exclude-random", OPT_EXCLUDE_RANDOM_SET }, + { "omit-color-empty", OPT_OMIT_COLOR_EMPTY_SET }, + }; + for (i = 0; i < COUNT_OF (options, struct option_set); i++) + if (opts_set & options[i].set) + vfprintf_diag ("--%s switch has no meaning with --clean%s", options[i].option, clean_all ? "-all" : ""); + } } else { @@ -555,6 +545,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 +643,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 */ @@ -779,7 +793,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"); } }