lib/colors: add colormode_or_err()

... to make the code easy to use in utils.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2013-05-07 09:09:35 +02:00
parent a971fa18b6
commit b7faf99128
3 changed files with 19 additions and 15 deletions

View File

@ -48,6 +48,7 @@ enum colortmode {
};
extern int colormode_from_string(const char *str);
extern int colormode_or_err(const char *str, const char *errmsg);
/* Initialize the global variable OUT_IS_TERM */
extern int colors_init(int mode);

View File

@ -61,10 +61,21 @@ int colormode_from_string(const char *str)
return -EINVAL;
}
int colormode_or_err(const char *str, const char *errmsg)
{
const char *p = str && *str == '=' ? str + 1 : str;
int colormode;
colormode = colormode_from_string(p);
if (colormode < 0)
errx(EXIT_FAILURE, "%s: '%s'", errmsg, p);
return colormode;
}
#ifdef TEST_PROGRAM
# include <getopt.h>
# include <err.h>
int main(int argc, char *argv[])
{
static const struct option longopts[] = {
@ -77,13 +88,8 @@ int main(int argc, char *argv[])
switch (c) {
case 'c':
mode = UL_COLORMODE_AUTO;
if (optarg) {
char *p = *optarg == '=' ? optarg + 1 : optarg;
mode = colormode_from_string(p);
if (mode < 0)
errx(EXIT_FAILURE, "'%s' unsupported color mode", p);
}
if (optarg)
mode = colormode_or_err(optarg, "unsupported color mode");
break;
}
}

View File

@ -1241,12 +1241,9 @@ int main(int argc, char *argv[])
break;
case 'L':
colormode = UL_COLORMODE_AUTO;
if (optarg) {
char *p = *optarg == '=' ? optarg + 1 : optarg;
colormode = colormode_from_string(p);
if (colormode < 0)
errx(EXIT_FAILURE, _("unsupported color mode: '%s'"), p);
}
if (optarg)
colormode = colormode_or_err(optarg,
_("unsupported color mode"));
break;
case 'l':
ctl.fltr_lev= 1;