From bfa6ed1bf43ea607e33a6e89a0ef03f84a5b5d38 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 30 Jul 2013 11:41:58 +0200 Subject: [PATCH] catv: code shrink catv_main 250 227 -23 Signed-off-by: Denys Vlasenko --- coreutils/catv.c | 15 +++++++++------ include/libbb.h | 5 ++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/coreutils/catv.c b/coreutils/catv.c index 18b18104e..0139b397f 100644 --- a/coreutils/catv.c +++ b/coreutils/catv.c @@ -26,19 +26,22 @@ int catv_main(int argc UNUSED_PARAM, char **argv) int retval = EXIT_SUCCESS; int fd; unsigned opts; - int flags = 0; - - opts = getopt32(argv, "etv"); #define CATV_OPT_e (1<<0) #define CATV_OPT_t (1<<1) #define CATV_OPT_v (1<<2) + typedef char BUG_const_mismatch[ + CATV_OPT_e == VISIBLE_ENDLINE && CATV_OPT_t == VISIBLE_SHOW_TABS + ? 1 : -1 + ]; + + opts = getopt32(argv, "etv"); argv += optind; - if (opts & (CATV_OPT_e | CATV_OPT_t)) - opts &= ~CATV_OPT_v; +#if 0 /* These consts match, we can just pass "opts" to visible() */ if (opts & CATV_OPT_e) flags |= VISIBLE_ENDLINE; if (opts & CATV_OPT_t) flags |= VISIBLE_SHOW_TABS; +#endif /* Read from stdin if there's nothing else to do. */ if (!argv[0]) @@ -64,7 +67,7 @@ int catv_main(int argc UNUSED_PARAM, char **argv) putchar(c); } else { char buf[sizeof("M-^c")]; - visible(c, buf, flags); + visible(c, buf, opts); fputs(buf, stdout); } } diff --git a/include/libbb.h b/include/libbb.h index 0c3734cdb..171214586 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -680,7 +680,10 @@ enum { PRINTABLE_META = 0x100 }; void fputc_printable(int ch, FILE *file) FAST_FUNC; /* Return a string that is the printable representation of character ch. * Buffer must hold at least four characters. */ -enum { VISIBLE_SHOW_TABS = 1, VISIBLE_ENDLINE = 2 }; +enum { + VISIBLE_ENDLINE = 1 << 0, + VISIBLE_SHOW_TABS = 1 << 1, +}; void visible(unsigned ch, char *buf, int flags) FAST_FUNC; /* dmalloc will redefine these to it's own implementation. It is safe