From a2bdc5c55485b054088513083ca0c78ce11445a9 Mon Sep 17 00:00:00 2001 From: Kang-Che Sung Date: Fri, 14 Jul 2017 09:56:13 +0200 Subject: [PATCH] cat: allow compiling out -n and -b When these options were introduced in d88f94a5df3a2edb8ba56fab5c13674b452f87ab it provides no config options to compile them out. Now provide one. Introduce config FEATURE_CATN. Signed-off-by: Kang-Che Sung Signed-off-by: Denys Vlasenko --- coreutils/cat.c | 59 +++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/coreutils/cat.c b/coreutils/cat.c index 4d9147f8a..178f96b09 100644 --- a/coreutils/cat.c +++ b/coreutils/cat.c @@ -13,6 +13,13 @@ //config: cat is used to concatenate files and print them to the standard //config: output. Enable this option if you wish to enable the 'cat' utility. //config: +//config:config FEATURE_CATN +//config: bool "Enable -n and -b options" +//config: default y +//config: depends on CAT +//config: help +//config: -n numbers all output lines while -b numbers nonempty output lines. +//config: //config:config FEATURE_CATV //config: bool "cat -v[etA]" //config: default y @@ -27,12 +34,19 @@ /* BB_AUDIT SUSv3 compliant */ /* http://www.opengroup.org/onlinepubs/007904975/utilities/cat.html */ +//usage:#if ENABLE_FEATURE_CATN || ENABLE_FEATURE_CATV //usage:#define cat_trivial_usage -//usage: "[-nb"IF_FEATURE_CATV("vteA")"] [FILE]..." +//usage: "[-" IF_FEATURE_CATN("nb") IF_FEATURE_CATV("vteA") "] [FILE]..." +//usage:#else +//usage:#define cat_trivial_usage +//usage: "[FILE]..." +//usage:#endif //usage:#define cat_full_usage "\n\n" //usage: "Print FILEs to stdout\n" +//usage: IF_FEATURE_CATN( //usage: "\n -n Number output lines" //usage: "\n -b Number nonempty lines" +//usage: ) //usage: IF_FEATURE_CATV( //usage: "\n -v Show nonprinting characters as ^x or M-x" //usage: "\n -t ...and tabs as ^I" @@ -84,7 +98,7 @@ * I agree with the argument. Unfortunately, this ship has sailed (1983...). * There are dozens of Linux distros and each of them has "cat" which supports -v. * It's unrealistic for us to "reeducate" them to use our, incompatible way - * to achieve "cat -v" effect. The actuall effect would be "users pissed off + * to achieve "cat -v" effect. The actual effect would be "users pissed off * by gratuitous incompatibility". */ #define CATV_OPT_e (1<<0) @@ -147,7 +161,7 @@ int cat_main(int argc UNUSED_PARAM, char **argv) IF_FEATURE_CATV(opt_complementary = "Aetv"; /* -A == -vet */) /* -u is ignored ("unbuffered") */ - opts = getopt32(argv, IF_FEATURE_CATV("etvA")"nbu"); + opts = getopt32(argv, IF_FEATURE_CATV("etvA") IF_FEATURE_CATN("nb") "u"); argv += optind; #if ENABLE_FEATURE_CATV @@ -157,23 +171,26 @@ int cat_main(int argc UNUSED_PARAM, char **argv) opts >>= 4; #endif -#define CAT_OPT_n (1<<0) -#define CAT_OPT_b (1<<1) -#define CAT_OPT_u (1<<2) - if (!(opts & (CAT_OPT_n|CAT_OPT_b))) /* no -n or -b */ - return bb_cat(argv); +#if ENABLE_FEATURE_CATN +# define CAT_OPT_n (1<<0) +# define CAT_OPT_b (1<<1) + if (opts & (CAT_OPT_n|CAT_OPT_b)) { /* -n or -b */ + if (!*argv) + *--argv = (char*)"-"; + ns.width = 6; + ns.start = 1; + ns.inc = 1; + ns.sep = "\t"; + ns.empty_str = "\n"; + ns.all = !(opts & CAT_OPT_b); /* -n without -b */ + ns.nonempty = (opts & CAT_OPT_b); /* -b (with or without -n) */ + do { + print_numbered_lines(&ns, *argv); + } while (*++argv); + fflush_stdout_and_exit(EXIT_SUCCESS); + } + /*opts >>= 2;*/ +#endif - if (!*argv) - *--argv = (char*)"-"; - ns.width = 6; - ns.start = 1; - ns.inc = 1; - ns.sep = "\t"; - ns.empty_str = "\n"; - ns.all = !(opts & CAT_OPT_b); /* -n without -b */ - ns.nonempty = (opts & CAT_OPT_b); /* -b (with or without -n) */ - do { - print_numbered_lines(&ns, *argv); - } while (*++argv); - fflush_stdout_and_exit(EXIT_SUCCESS); + return bb_cat(argv); }