bc: convert to "G trick" - this returns bc to zero bss increase
[oweals/busybox.git] / coreutils / od.c
index e4179a36d861022df771306c1715d37625c44f18..9a888dd5f53b8451cfccdd6ed08624af8cc662f9 100644 (file)
@@ -4,13 +4,28 @@
  * Based on code from util-linux v 2.11l
  *
  * Copyright (c) 1990
- *     The Regents of the University of California.  All rights reserved.
+ * The Regents of the University of California.  All rights reserved.
  *
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  *
  * Original copyright notice is retained at the end of this file.
  */
+//config:config OD
+//config:      bool "od (11 kb)"
+//config:      default y
+//config:      help
+//config:      od is used to dump binary files in octal and other formats.
 
+//applet:IF_OD(APPLET(od, BB_DIR_USR_BIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_OD) += od.o
+
+//usage:#if !ENABLE_DESKTOP
+//usage:#define od_trivial_usage
+//usage:       "[-aBbcDdeFfHhIiLlOovXx] [FILE]"
+//usage:#define od_full_usage "\n\n"
+//usage:       "Print FILE (or stdin) unambiguously, as octal bytes by default"
+//usage:#endif
 
 #include "libbb.h"
 #if ENABLE_DESKTOP
@@ -20,9 +35,6 @@
 
 #include "dump.h"
 
-#define isdecdigit(c) isdigit(c)
-#define ishexdigit(c) (isxdigit)(c)
-
 static void
 odoffset(dumper_t *dumper, int argc, char ***argvp)
 {
@@ -51,8 +63,8 @@ odoffset(dumper_t *dumper, int argc, char ***argvp)
 
        if ((*p != '+')
                && (argc < 2
-                       || (!isdecdigit(p[0])
-                               && ((p[0] != 'x') || !ishexdigit(p[1])))))
+                       || (!isdigit(p[0])
+                               && ((p[0] != 'x') || !isxdigit(p[1])))))
                return;
 
        base = 0;
@@ -62,7 +74,7 @@ odoffset(dumper_t *dumper, int argc, char ***argvp)
         */
        if (p[0] == '+')
                ++p;
-       if (p[0] == 'x' && ishexdigit(p[1])) {
+       if (p[0] == 'x' && isxdigit(p[1])) {
                ++p;
                base = 16;
        } else if (p[0] == '0' && p[1] == 'x') {
@@ -72,10 +84,10 @@ odoffset(dumper_t *dumper, int argc, char ***argvp)
 
        /* skip over the number */
        if (base == 16)
-               for (num = p; ishexdigit(*p); ++p)
+               for (num = p; isxdigit(*p); ++p)
                        continue;
        else
-               for (num = p; isdecdigit(*p); ++p)
+               for (num = p; isdigit(*p); ++p)
                        continue;
 
        /* check for no number */
@@ -113,7 +125,7 @@ odoffset(dumper_t *dumper, int argc, char ***argvp)
                         * the offset is changed as well.  This isn't pretty,
                         * but it's easy.
                         */
-#define        TYPE_OFFSET     7
+#define TYPE_OFFSET 7
                        {
                                char x_or_d;
                                if (base == 16) {
@@ -133,19 +145,19 @@ odoffset(dumper_t *dumper, int argc, char ***argvp)
 }
 
 static const char *const add_strings[] = {
-       "16/1 \"%3_u \" \"\\n\"",                               /* a */
-       "8/2 \" %06o \" \"\\n\"",                               /* B, o */
-       "16/1 \"%03o \" \"\\n\"",                               /* b */
-       "16/1 \"%3_c \" \"\\n\"",                               /* c */
-       "8/2 \"  %05u \" \"\\n\"",                              /* d */
-       "4/4 \"     %010u \" \"\\n\"",                  /* D */
-       "2/8 \"          %21.14e \" \"\\n\"",   /* e (undocumented in od), F */
-       "4/4 \" %14.7e \" \"\\n\"",                             /* f */
-       "4/4 \"       %08x \" \"\\n\"",                 /* H, X */
-       "8/2 \"   %04x \" \"\\n\"",                             /* h, x */
-       "4/4 \"    %11d \" \"\\n\"",                    /* I, L, l */
-       "8/2 \" %6d \" \"\\n\"",                                /* i */
-       "4/4 \"    %011o \" \"\\n\"",                   /* O */
+       "16/1 \"%3_u \" \"\\n\"",              /* a */
+       "8/2 \" %06o \" \"\\n\"",              /* B, o */
+       "16/1 \"%03o \" \"\\n\"",              /* b */
+       "16/1 \"%3_c \" \"\\n\"",              /* c */
+       "8/2 \"  %05u \" \"\\n\"",             /* d */
+       "4/4 \"     %010u \" \"\\n\"",         /* D */
+       "2/8 \"          %21.14e \" \"\\n\"",  /* e (undocumented in od), F */
+       "4/4 \" %14.7e \" \"\\n\"",            /* f */
+       "4/4 \"       %08x \" \"\\n\"",        /* H, X */
+       "8/2 \"   %04x \" \"\\n\"",            /* h, x */
+       "4/4 \"    %11d \" \"\\n\"",           /* I, L, l */
+       "8/2 \" %6d \" \"\\n\"",               /* i */
+       "4/4 \"    %011o \" \"\\n\"",          /* O */
 };
 
 static const char od_opts[] ALIGN1 = "aBbcDdeFfHhIiLlOoXxv";
@@ -177,7 +189,7 @@ int od_main(int argc, char **argv)
                                bb_dump_add(dumper, "\"         \"");
                        }
                        bb_dump_add(dumper, add_strings[(int)od_o2si[(p - od_opts)]]);
-               } else {        /* P, p, s, w, or other unhandled */
+               } else {  /* P, p, s, w, or other unhandled */
                        bb_show_usage();
                }
        }
@@ -211,7 +223,7 @@ int od_main(int argc, char **argv)
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE