X-Git-Url: http://git.refcnt.org/?a=blobdiff_plain;f=colorize.c;h=cfc9159cac4242436a684c3b865ae0d9004d8cba;hb=2132b9543b9b82bb5cea8f54fa41feeaed2c7ba0;hp=69f1b51bf33a1bd54b82a5ae82da9ba1555b2baa;hpb=ec07f2562879ae4bbe93ca1de0854b250c9f72fa;p=colorize.git diff --git a/colorize.c b/colorize.c index 69f1b51..cfc9159 100644 --- a/colorize.c +++ b/colorize.c @@ -222,6 +222,11 @@ enum attr_type { ATTR_REVERSE = 0x08, ATTR_CONCEALED = 0x10 }; +struct attr { + const char *name; + unsigned int val; + enum attr_type type; +}; static FILE *stream; #if DEBUG @@ -241,7 +246,7 @@ static const char *program_name; static void process_opts (int, char **); static void process_opt_attr (const char *); -static void write_attr (unsigned int, unsigned int *, enum attr_type, const char *); +static void write_attr (const struct attr *, unsigned int *); static void print_hint (void); static void print_help (void); static void print_version (void); @@ -429,11 +434,7 @@ static void process_opt_attr (const char *p) { /* If attributes are added to this "list", also increase MAX_ATTRIBUTE_CHARS! */ - const struct attr { - const char *name; - unsigned int val; - enum attr_type type; - } attrs[] = { + const struct attr attrs[] = { { "bold", 1, ATTR_BOLD }, { "underscore", 4, ATTR_UNDERSCORE }, { "blink", 5, ATTR_BLINK }, @@ -461,13 +462,19 @@ process_opt_attr (const char *p) const size_t name_len = strlen (attrs[i].name); if ((size_t)(p - s) == name_len && strneq (s, attrs[i].name, name_len)) { - write_attr (attrs[i].val, &attr_types, attrs[i].type, attrs[i].name); + write_attr (&attrs[i], &attr_types); valid_attr = true; break; } } if (!valid_attr) - vfprintf_fail (formats[FMT_GENERIC], "--attr switch must be provided valid attribute names"); + { + char *attr_invalid = xmalloc ((p - s) + 1); + STACK_VAR (attr_invalid); + strncpy (attr_invalid, s, p - s); + attr_invalid[p - s] = '\0'; + vfprintf_fail ("--attr switch attribute '%s' is not valid", attr_invalid); + } } if (*p) p++; @@ -475,8 +482,12 @@ process_opt_attr (const char *p) } static void -write_attr (unsigned int val, unsigned int *attr_types, enum attr_type attr_type, const char *attr_name) +write_attr (const struct attr *attr_i, unsigned int *attr_types) { + const unsigned int val = attr_i->val; + const enum attr_type attr_type = attr_i->type; + const char *attr_name = attr_i->name; + if (*attr_types & attr_type) vfprintf_fail ("--attr switch has attribute '%s' twice or more", attr_name); snprintf (attr + strlen (attr), 3, "%u;", val); @@ -527,13 +538,11 @@ print_help (void) const char *short_opt = NULL; unsigned int i; for (i = 0; i < sizeof (short_opts) / sizeof (struct short_opt); i++) - { - if (streq (opt->name, short_opts[i].name)) - { - short_opt = short_opts[i].short_opt; - break; - } - } + if (streq (opt->name, short_opts[i].name)) + { + short_opt = short_opts[i].short_opt; + break; + } if (short_opt) printf ("\t\t-%s, --%s\n", short_opt, opt->name); else @@ -552,22 +561,23 @@ print_version (void) #endif const char *version_prefix, *version_string; const char *c_flags, *ld_flags, *cpp_flags; + const char *const desc_flags_unknown = "unknown"; struct bytes_size bytes_size; bool debug; #ifdef CFLAGS c_flags = to_str (CFLAGS); #else - c_flags = "unknown"; + c_flags = desc_flags_unknown; #endif #ifdef LDFLAGS ld_flags = to_str (LDFLAGS); #else - ld_flags = "unknown"; + ld_flags = desc_flags_unknown; #endif #ifdef CPPFLAGS cpp_flags = to_str (CPPFLAGS); #else - cpp_flags = "unknown"; + cpp_flags = desc_flags_unknown; #endif #if DEBUG debug = true; @@ -637,7 +647,7 @@ process_args (unsigned int arg_cnt, char **arg_strings, char *attr, const struct const char *color_string = arg_cnt >= 1 ? arg_strings[0] : NULL; const char *file_string = arg_cnt == 2 ? arg_strings[1] : NULL; - assert (color_string); + assert (color_string != NULL); if (streq (color_string, "-")) { @@ -666,7 +676,7 @@ process_args (unsigned int arg_cnt, char **arg_strings, char *attr, const struct gather_color_names (color_string, attr, color_names); - assert (color_names[FOREGROUND]); + assert (color_names[FOREGROUND] != NULL); if (color_names[BACKGROUND]) { @@ -682,6 +692,7 @@ process_args (unsigned int arg_cnt, char **arg_strings, char *attr, const struct } find_color_entries (color_names, colors); + assert (colors[FOREGROUND] != NULL); free_color_names (color_names); if (!colors[FOREGROUND]->code && colors[BACKGROUND] && colors[BACKGROUND]->code) @@ -727,8 +738,8 @@ process_file_arg (const char *file_string, const char **file, FILE **stream) *file = "stdin"; } - assert (*stream); - assert (*file); + assert (*stream != NULL); + assert (*file != NULL); } static void @@ -768,15 +779,15 @@ skip_path_colors (const char *color_string, const char *file_string, const struc if (have_file) { - const char *file_exists = color_string; + const char *file_existing = color_string; if (file_string) - vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_exists, "cannot be used as color string"); + vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_existing, "cannot be used as color string"); else { if (VALID_FILE_TYPE (mode)) - vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_exists, "must be preceded by color string"); + vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_existing, "must be preceded by color string"); else - vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_exists, "is not a valid file type"); + vfprintf_fail (formats[FMT_QUOTE], get_file_type (mode), file_existing, "is not a valid file type"); } } } @@ -802,7 +813,7 @@ gather_color_names (const char *color_string, char *attr, struct color_name **co } else p = color + strlen (color); - assert (p); + assert (p != NULL); for (ch = color; *ch; ch++) if (!isalpha (*ch)) @@ -958,7 +969,7 @@ complete_part_line (const char *p, char **buf, FILE *stream) if (read_from_stream) save_char (ch, buf, &i, &size); } - else /* read next character */ + else /* got next character */ { got_next_char = true; break;