bc: convert to "G trick" - this returns bc to zero bss increase
[oweals/busybox.git] / coreutils / split.c
index f0077077eb4a2d6243c66e27e541127b5bb1a601..4e1db190c1b0e201627729f129537f03c5419d37 100644 (file)
@@ -5,6 +5,25 @@
  *
  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
+//config:config SPLIT
+//config:      bool "split (5.4 kb)"
+//config:      default y
+//config:      help
+//config:      Split a file into pieces.
+//config:
+//config:config FEATURE_SPLIT_FANCY
+//config:      bool "Fancy extensions"
+//config:      default y
+//config:      depends on SPLIT
+//config:      help
+//config:      Add support for features not required by SUSv3.
+//config:      Supports additional suffixes 'b' for 512 bytes,
+//config:      'g' for 1GiB for the -b option.
+
+//applet:IF_SPLIT(APPLET(split, BB_DIR_USR_BIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_SPLIT) += split.o
+
 /* BB_AUDIT: SUSv3 compliant
  * SUSv3 requirements:
  * http://www.opengroup.org/onlinepubs/009695399/utilities/split.html
@@ -13,8 +32,7 @@
 //usage:#define split_trivial_usage
 //usage:       "[OPTIONS] [INPUT [PREFIX]]"
 //usage:#define split_full_usage "\n\n"
-//usage:       "Options:"
-//usage:     "\n       -b N[k|m]       Split by N (kilo|mega)bytes"
+//usage:       "       -b N[k|m]       Split by N (kilo|mega)bytes"
 //usage:     "\n       -l N            Split by N lines"
 //usage:     "\n       -a N            Use N letters as suffix"
 //usage:
 //usage:       "$ cat TODO | split -a 2 -l 2 TODO_\n"
 
 #include "libbb.h"
+#include "common_bufsiz.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.
@@ -81,13 +98,21 @@ int split_main(int argc UNUSED_PARAM, char **argv)
        ssize_t bytes_read, to_write;
        char *src;
 
-       opt_complementary = "?2:a+"; /* max 2 args; -a N */
-       opt = getopt32(argv, "l:b:a:", &count_p, &count_p, &suffix_len);
+       setup_common_bufsiz();
+
+       opt = getopt32(argv, "^"
+                       "l:b:a:+" /* -a N */
+                       "\0" "?2"/*max 2 args*/,
+                       &count_p, &count_p, &suffix_len
+       );
 
        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;