Commonalize typical [b,]k,m suffix struct
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 13 Jul 2013 21:49:45 +0000 (23:49 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 13 Jul 2013 21:49:45 +0000 (23:49 +0200)
function                                             old     new   delta
bkm_suffixes                                           -      32     +32
static.km_suffixes                                    24       -     -24
suffixes                                              32       -     -32
static.bkm                                            32       -     -32
head_tail_suffixes                                    32       -     -32
------------------------------------------------------------------------------
(add/remove: 2/6 grow/shrink: 0/0 up/down: 72/-160)           Total: -88 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
TODO
coreutils/head.c
coreutils/head_tail.c [deleted file]
coreutils/head_tail.h [deleted file]
coreutils/od_bloaty.c
coreutils/split.c
coreutils/tail.c
include/libbb.h
libbb/xatonum.c
runit/svlogd.c
util-linux/hexdump.c

diff --git a/TODO b/TODO
index 4436469..b66a1c1 100644 (file)
--- a/TODO
+++ b/TODO
@@ -132,11 +132,6 @@ stty / catv
   stty's visible() function and catv's guts are identical. Merge them into
   an appropriate libbb function.
 ---
-struct suffix_mult
-  Several duplicate users of: grep -r "1024\*1024" * -B2 -A1
-  Merge to a single size_suffixes[] in libbb.
-  Users: head tail od_bloaty hexdump and (partially as it wouldn't hurt) svlogd
----
 tail
   ./busybox tail -f foo.c~ TODO
   should not print fmt=header_fmt for subsequent date >> TODO; i.e. only
index 291e1ce..9388b02 100644 (file)
@@ -12,7 +12,6 @@
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/head.html */
 
 //kbuild:lib-$(CONFIG_HEAD) += head.o
-//kbuild:lib-$(CONFIG_HEAD) += head_tail.o
 
 //usage:#define head_trivial_usage
 //usage:       "[OPTIONS] [FILE]..."
@@ -35,7 +34,6 @@
 //usage:       "daemon:x:1:1:daemon:/usr/sbin:/bin/sh\n"
 
 #include "libbb.h"
-#include "head_tail.h"
 
 /* This is a NOEXEC applet. Be very careful! */
 
@@ -140,7 +138,7 @@ eat_num(bool *negative_N, const char *p)
                p++;
        }
 #endif
-       return xatoul_sfx(p, head_tail_suffixes);
+       return xatoul_sfx(p, bkm_suffixes);
 }
 
 static const char head_opts[] ALIGN1 =
diff --git a/coreutils/head_tail.c b/coreutils/head_tail.c
deleted file mode 100644 (file)
index 1658c0d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (C) 2013 Denys Vlasenko
- *
- * Licensed under GPLv2, see file LICENSE in this source tree.
- */
-#include "libbb.h"
-#include "head_tail.h"
-
-const struct suffix_mult head_tail_suffixes[] = {
-       { "b", 512 },
-       { "k", 1024 },
-       { "m", 1024*1024 },
-       { "", 0 }
-};
diff --git a/coreutils/head_tail.h b/coreutils/head_tail.h
deleted file mode 100644 (file)
index df19e41..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Copyright (C) 2013 Denys Vlasenko
- *
- * Licensed under GPLv2, see file LICENSE in this source tree.
- */
-extern const struct suffix_mult head_tail_suffixes[];
index b408a84..2c26dda 100644 (file)
@@ -1166,12 +1166,6 @@ parse_old_offset(const char *s, off_t *offset)
 int od_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int od_main(int argc UNUSED_PARAM, char **argv)
 {
-       static const struct suffix_mult bkm[] = {
-               { "b", 512 },
-               { "k", 1024 },
-               { "m", 1024*1024 },
-               { "", 0 }
-       };
 #if ENABLE_LONG_OPTS
        static const char od_longopts[] ALIGN1 =
                "skip-bytes\0"        Required_argument "j"
@@ -1230,7 +1224,7 @@ int od_main(int argc UNUSED_PARAM, char **argv)
                address_pad_len_char = doxn_address_pad_len_char[pos];
        }
        if (opt & OPT_N) {
-               max_bytes_to_format = xstrtooff_sfx(str_N, 0, bkm);
+               max_bytes_to_format = xstrtooff_sfx(str_N, 0, bkm_suffixes);
        }
        if (opt & OPT_a) decode_format_string("a");
        if (opt & OPT_b) decode_format_string("oC");
@@ -1239,7 +1233,7 @@ int od_main(int argc UNUSED_PARAM, char **argv)
        if (opt & OPT_f) decode_format_string("fF");
        if (opt & OPT_h) decode_format_string("x2");
        if (opt & OPT_i) decode_format_string("d2");
-       if (opt & OPT_j) n_bytes_to_skip = xstrtooff_sfx(str_j, 0, bkm);
+       if (opt & OPT_j) n_bytes_to_skip = xstrtooff_sfx(str_j, 0, bkm_suffixes);
        if (opt & OPT_l) decode_format_string("d4");
        if (opt & OPT_o) decode_format_string("o2");
        while (lst_t) {
@@ -1248,7 +1242,7 @@ int od_main(int argc UNUSED_PARAM, char **argv)
        if (opt & OPT_x) decode_format_string("x2");
        if (opt & OPT_s) decode_format_string("d2");
        if (opt & OPT_S) {
-               string_min = xstrtou_sfx(str_S, 0, bkm);
+               string_min = xstrtou_sfx(str_S, 0, bkm_suffixes);
        }
 
        // Bloat:
index 11e6404..1e1673e 100644 (file)
 
 #include "libbb.h"
 
-static const struct suffix_mult split_suffices[] = {
 #if ENABLE_FEATURE_SPLIT_FANCY
+static const struct suffix_mult split_suffixes[] = {
        { "b", 512 },
-#endif
        { "k", 1024 },
        { "m", 1024*1024 },
-#if ENABLE_FEATURE_SPLIT_FANCY
        { "g", 1024*1024*1024 },
-#endif
        { "", 0 }
 };
+#endif
 
 /* Increment the suffix part of the filename.
  * Returns NULL if we are out of filenames.
@@ -86,7 +84,10 @@ int split_main(int argc UNUSED_PARAM, char **argv)
        if (opt & SPLIT_OPT_l)
                cnt = XATOOFF(count_p);
        if (opt & SPLIT_OPT_b) // FIXME: also needs XATOOFF
-               cnt = xatoull_sfx(count_p, split_suffices);
+               cnt = xatoull_sfx(count_p,
+                               IF_FEATURE_SPLIT_FANCY(split_suffixes)
+                               IF_NOT_FEATURE_SPLIT_FANCY(km_suffixes)
+               );
        sfx = "x";
 
        argv += optind;
index c9f9d00..07c71ca 100644 (file)
@@ -25,7 +25,6 @@
  */
 
 //kbuild:lib-$(CONFIG_TAIL) += tail.o
-//kbuild:lib-$(CONFIG_TAIL) += head_tail.o
 
 //usage:#define tail_trivial_usage
 //usage:       "[OPTIONS] [FILE]..."
@@ -51,7 +50,6 @@
 //usage:       "nameserver 10.0.0.1\n"
 
 #include "libbb.h"
-#include "head_tail.h"
 
 struct globals {
        bool from_top;
@@ -89,7 +87,7 @@ static unsigned eat_num(const char *p)
                p++;
                G.from_top = 1;
        }
-       return xatou_sfx(p, head_tail_suffixes);
+       return xatou_sfx(p, bkm_suffixes);
 }
 
 int tail_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
index 0852104..f22c125 100644 (file)
@@ -832,6 +832,9 @@ struct suffix_mult {
        char suffix[4];
        unsigned mult;
 };
+extern const struct suffix_mult bkm_suffixes[];
+#define km_suffixes (bkm_suffixes + 1)
+
 #include "xatonum.h"
 /* Specialized: */
 
index 62bbe53..6f4e023 100644 (file)
@@ -68,3 +68,10 @@ uint16_t FAST_FUNC xatou16(const char *numstr)
 {
        return xatou_range(numstr, 0, 0xffff);
 }
+
+const struct suffix_mult bkm_suffixes[] = {
+       { "b", 512 },
+       { "k", 1024 },
+       { "m", 1024*1024 },
+       { "", 0 }
+};
index b7a0a6e..8b8a6d8 100644 (file)
@@ -745,11 +745,6 @@ static NOINLINE unsigned logdir_open(struct logdir *ld, const char *fn)
                                ld->inst = new;
                                break;
                        case 's': {
-                               static const struct suffix_mult km_suffixes[] = {
-                                       { "k", 1024 },
-                                       { "m", 1024*1024 },
-                                       { "", 0 }
-                               };
                                ld->sizemax = xatou_sfx(&s[1], km_suffixes);
                                break;
                        }
index 4d998b9..ac7e24f 100644 (file)
@@ -66,13 +66,6 @@ static const char add_first[] ALIGN1 = "\"%07.7_Ax\n\"";
 
 static const char hexdump_opts[] ALIGN1 = "bcdoxCe:f:n:s:v" IF_FEATURE_HEXDUMP_REVERSE("R");
 
-static const struct suffix_mult suffixes[] = {
-       { "b", 512 },
-       { "k", 1024 },
-       { "m", 1024*1024 },
-       { "", 0 }
-};
-
 int hexdump_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int hexdump_main(int argc, char **argv)
 {
@@ -120,7 +113,7 @@ int hexdump_main(int argc, char **argv)
                                optarg,
                                /*base:*/ 0,
                                /*lo:*/ 0, /*hi:*/ OFF_T_MAX,
-                               suffixes
+                               bkm_suffixes
                        );
                } /* else */
                if (ch == 'v') {