* colorize - Read text from standard input stream or file and print
* it colorized through use of ANSI escape sequences
*
- * Copyright (c) 2011-2017 Steven Schubiger
+ * Copyright (c) 2011-2018 Steven Schubiger
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#define LF 0x01
#define CR 0x02
+#define COUNT_OF(obj, type) (sizeof (obj) / sizeof (type))
+
#define SKIP_LINE_ENDINGS(flags) ((flags) == (CR|LF) ? 2 : 1)
#define VALID_FILE_TYPE(mode) (S_ISREG (mode) || S_ISLNK (mode) || S_ISFIFO (mode))
#define PROGRAM_NAME "colorize"
-#define VERSION "0.63"
+#define VERSION "0.64"
typedef enum { false, true } bool;
unsigned int count;
const char *desc;
} tables[] = {
- { fg_colors, sizeof (fg_colors) / sizeof (struct color), "foreground" },
- { bg_colors, sizeof (bg_colors) / sizeof (struct color), "background" },
+ { fg_colors, COUNT_OF (fg_colors, struct color), "foreground" },
+ { bg_colors, COUNT_OF (bg_colors, struct color), "background" },
};
enum {
vfprintf_fail (formats[FMT_GENERIC], "--clean and --clean-all switch are mutually exclusive");
if (arg_cnt > 1)
{
- const char *format = "%s %s";
- const char *message = "switch cannot be used with more than one file";
+ 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)
{
bool valid_attr = false;
unsigned int i;
- for (i = 0; i < sizeof (attrs) / sizeof (struct attr); i++)
+ for (i = 0; i < COUNT_OF (attrs, struct attr); i++)
{
const size_t name_len = strlen (attrs[i].name);
if ((size_t)(p - s) == name_len && strneq (s, attrs[i].name, name_len))
{
const struct opt_data *opt_data = NULL;
unsigned int i;
- for (i = 0; i < sizeof (opts_data) / sizeof (struct opt_data); i++)
+ for (i = 0; i < COUNT_OF (opts_data, struct opt_data); i++)
if (streq (opt->name, opts_data[i].name))
{
opt_data = &opts_data[i];
#ifdef HAVE_VERSION
# include "version.h"
#else
- const char *version = NULL;
+ const char *const version = NULL;
#endif
const char *version_prefix, *version_string;
const char *c_flags, *ld_flags, *cpp_flags;
int ret;
char *p;
struct stat sb;
- struct color_name *color_names[3] = { NULL, NULL, NULL };
+ struct color_name *color_names[3] = {
+ NULL, /* foreground */
+ NULL, /* background */
+ NULL, /* sentinel value */
+ };
const char *color_string = arg_cnt >= 1 ? arg_strings[0] : NULL;
const char *file_string = arg_cnt == 2 ? arg_strings[1] : NULL;