catv: code shrink

catv_main                                            250     227     -23

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/coreutils/catv.c b/coreutils/catv.c
index 18b1810..0139b39 100644
--- a/coreutils/catv.c
+++ b/coreutils/catv.c
@@ -26,19 +26,22 @@
 	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 @@
 					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 0c3734c..1712145 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -680,7 +680,10 @@
 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