audit small applets and mark some of them as NOFORK.
authorDenis Vlasenko <vda.linux@googlemail.com>
Tue, 10 Apr 2007 15:43:37 +0000 (15:43 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Tue, 10 Apr 2007 15:43:37 +0000 (15:43 -0000)
Put big scary warnings in relevant places.

41 files changed:
coreutils/basename.c
coreutils/cat.c
coreutils/chgrp.c
coreutils/chmod.c
coreutils/chown.c
coreutils/chroot.c
coreutils/cp.c
coreutils/cut.c
coreutils/dd.c
coreutils/dirname.c
coreutils/false.c
coreutils/hostid.c
coreutils/length.c
coreutils/ln.c
coreutils/logname.c
coreutils/ls.c
coreutils/mkdir.c
coreutils/mkfifo.c
coreutils/pwd.c
coreutils/rm.c
coreutils/rmdir.c
coreutils/seq.c
coreutils/sleep.c
coreutils/sort.c
coreutils/sync.c
coreutils/test.c
coreutils/true.c
coreutils/tty.c
coreutils/usleep.c
coreutils/whoami.c
coreutils/yes.c
editors/awk.c
findutils/find.c
findutils/xargs.c
include/applets.h
libbb/copyfd.c
libbb/fflush_stdout_and_exit.c
libbb/make_directory.c
libbb/parse_mode.c
libbb/remove_file.c
util-linux/hexdump.c

index 46f7122c8514b446d472526b4c3ddb58116f8ef2..f4307d6ce1ede5cde7b833609b206518b39ba1b7 100644 (file)
  * 3) Save some space by using strcmp().  Calling strncmp() here was silly.
  */
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int basename_main(int argc, char **argv);
 int basename_main(int argc, char **argv)
 {
@@ -47,5 +46,5 @@ int basename_main(int argc, char **argv)
 
        puts(s);
 
-       fflush_stdout_and_exit(EXIT_SUCCESS);
+       return fflush(stdout);
 }
index 7bab325ef8a8bbcc3a86fc9ae886ca3013290efd..eb141dc79d7eb88537db91a1f9ffb22cb410009f 100644 (file)
 
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
+
 int bb_cat(char **argv)
 {
        static const char *const argv_dash[] = { "-", NULL };
+
        FILE *f;
        int retval = EXIT_SUCCESS;
 
-       if (!*argv) argv = (char**) &argv_dash;
+       if (!*argv)
+               argv = (char**) &argv_dash;
 
        do {
                f = fopen_or_warn_stdin(*argv);
                if (f) {
+                       /* This is not an xfunc - never exits */
                        off_t r = bb_copyfd_eof(fileno(f), STDOUT_FILENO);
                        fclose_if_not_stdin(f);
                        if (r >= 0)
index cfb8c15b2e2b14266d39a79d9375730e8613b58b..48014ecdff8f244e8e7cf2a1fcc7de1f2b29f499 100644 (file)
@@ -13,6 +13,9 @@
 
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 int chgrp_main(int argc, char **argv);
 int chgrp_main(int argc, char **argv)
 {
index 9a73218a1a324daa9c71fd0526da9c104a445a0c..aa36258772d9cd71e2cfe21e5a4508c43769925e 100644 (file)
@@ -16,6 +16,9 @@
 
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 #define OPT_RECURSE (option_mask32 & 1)
 #define OPT_VERBOSE (USE_DESKTOP(option_mask32 & 2) SKIP_DESKTOP(0))
 #define OPT_CHANGED (USE_DESKTOP(option_mask32 & 4) SKIP_DESKTOP(0))
index e64a39c3e8ce6f9dc1c8a8610cd817fbfc14ecc2..71ba812473c30121360ab06eb62d9d1caa627175 100644 (file)
@@ -13,6 +13,9 @@
 
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 #define OPT_STR     ("Rh" USE_DESKTOP("vcfLHP"))
 #define BIT_RECURSE 1
 #define OPT_RECURSE (option_mask32 & 1)
index fcd70f21a8bcfe9e07f3f449c592cde17ba96527..874ee917edb513ac9b08e39c154495bc47056850 100644 (file)
@@ -27,8 +27,9 @@ int chroot_main(int argc, char **argv)
        ++argv;
        if (argc == 2) {
                argv -= 2;
-               if (!(*argv = getenv("SHELL"))) {
-                       *argv = (char *) DEFAULT_SHELL;
+               argv[0] = getenv("SHELL");
+               if (!argv[0]) {
+                       argv[0] = (char *) DEFAULT_SHELL;
                }
                argv[1] = (char *) "-i";
        }
index a80e0d286b62316f6535b5fc562ae5350083a1c3..8c0937971d4915b08ff037844105c6a230bed4fe 100644 (file)
@@ -18,6 +18,9 @@
 #include "busybox.h"
 #include "libcoreutils/coreutils.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 int cp_main(int argc, char **argv);
 int cp_main(int argc, char **argv)
 {
index 22014fcfb2e229c88e2169196d32292a275a132e..b9ea3127ce3349d110d29ec21122c1799ec8c375 100644 (file)
@@ -11,6 +11,9 @@
 
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 /* option vars */
 static const char optstring[] = "b:c:f:d:sn";
 #define CUT_OPT_BYTE_FLGS      (1<<0)
index 4507b5e0c31974fe3f13ba70a78de4fd3c997043..34a325ea6ffeee63b1aa5178ebb6cedb82b20558 100644 (file)
@@ -8,8 +8,11 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include "busybox.h"
 #include <signal.h>  /* For FEATURE_DD_SIGNAL_HANDLING */
+#include "busybox.h"
+
+/* This is a NOEXEC applet. Be very careful! */
+
 
 static const struct suffix_mult dd_suffixes[] = {
        { "c", 1 },
index 4ecde3147daf578673ef8fde0bd89ff37b20e989..7c5484bfde9e45935fd3dd17b0e824893e953ecd 100644 (file)
 /* BB_AUDIT SUSv3 compliant */
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/dirname.html */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int dirname_main(int argc, char **argv);
 int dirname_main(int argc, char **argv)
 {
@@ -23,5 +23,5 @@ int dirname_main(int argc, char **argv)
 
        puts(dirname(argv[1]));
 
-       fflush_stdout_and_exit(EXIT_SUCCESS);
+       return fflush(stdout);
 }
index 2a26e0e289cd45d05123d8c6df85ae6d8b0449f4..90d6a0162c85032dee88f580995b775de1f3032e 100644 (file)
 /* BB_AUDIT SUSv3 compliant */
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/false.html */
 
-#include <stdlib.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int false_main(int ATTRIBUTE_UNUSED argc, char ATTRIBUTE_UNUSED **argv);
 int false_main(int ATTRIBUTE_UNUSED argc, char ATTRIBUTE_UNUSED **argv)
 {
index 51a76c6311607ac5c7d374ad4a76de0046a065cb..e14f6ca57a69d9fa84a8862ccb1faea5ee34ca6f 100644 (file)
@@ -9,10 +9,10 @@
 
 /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
 
-#include <stdlib.h>
-#include <unistd.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int hostid_main(int argc, char ATTRIBUTE_UNUSED **argv);
 int hostid_main(int argc, char ATTRIBUTE_UNUSED **argv)
 {
@@ -22,5 +22,5 @@ int hostid_main(int argc, char ATTRIBUTE_UNUSED **argv)
 
        printf("%lx\n", gethostid());
 
-       fflush_stdout_and_exit(EXIT_SUCCESS);
+       return fflush(stdout);
 }
index 1dc122cc17c48b04011380e0952b9841f4eeb219..b3a9d4903dc72458c8755a33913dd8d8a5dcab62 100644 (file)
@@ -2,19 +2,18 @@
 
 /* BB_AUDIT SUSv3 N/A -- Apparently a busybox (obsolete?) extension. */
 
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int length_main(int argc, char **argv);
 int length_main(int argc, char **argv)
 {
-       if ((argc != 2) ||  (**(++argv) == '-')) {
-           bb_show_usage();
+       if ((argc != 2) || (**(++argv) == '-')) {
+               bb_show_usage();
        }
 
-       printf("%lu\n", (unsigned long)strlen(*argv));
+       printf("%u\n", (unsigned)strlen(*argv));
 
-       fflush_stdout_and_exit(EXIT_SUCCESS);
+       return fflush(stdout);
 }
index 720713475cada2c607320cad3e2425b483ed0a33..fd4eacec2ddd18e74412c2e447a49ab74a144b48 100644 (file)
@@ -13,6 +13,9 @@
 
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 #define LN_SYMLINK          1
 #define LN_FORCE            2
 #define LN_NODEREFERENCE    4
index 743e2291c61d5bcdd200c64cdb595f8f5a9b9127..aba6ce3c6162500e24a3f16c8abc33b0ff671b72 100644 (file)
  * a diagnostic message and an error return.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int logname_main(int argc, char ATTRIBUTE_UNUSED **argv);
 int logname_main(int argc, char ATTRIBUTE_UNUSED **argv)
 {
-       const char *p;
+       char buf[128];
 
        if (argc > 1) {
                bb_show_usage();
        }
 
-       if ((p = getlogin()) != NULL) {
-               puts(p);
-               fflush_stdout_and_exit(EXIT_SUCCESS);
+       /* Using _r function - avoid pulling in static buffer from libc */
+       if (getlogin_r(buf, sizeof(buf)) == 0) {
+               puts(buf);
+               return fflush(stdout);
        }
 
        bb_perror_msg_and_die("getlogin");
index 34836ee29cea2fbfddda20aa31d02c9b9780efc7..7bbb19d6cf3dd36c7d1fc6003456be30b1ab06ea 100644 (file)
  * 1. requires lstat (BSD) - how do you do it without?
  */
 
-#include "busybox.h"
 #include <getopt.h>
+#include "busybox.h"
+
+/* This is a NOEXEC applet. Be very careful! */
+
 
 enum {
 
index 690e4ab4094f2184d28e18063ad6e6334945d625..5a6c9d077182cac0036bed5c799360d7ad4a7d25 100644 (file)
 /* Nov 28, 2006      Yoshinori Sato <ysato@users.sourceforge.jp>: Add SELinux Support.
  */
 
-#include <stdlib.h>
-#include <unistd.h>
 #include <getopt.h> /* struct option */
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 #if ENABLE_FEATURE_MKDIR_LONG_OPTIONS
 static const struct option mkdir_long_options[] = {
-       { "mode", 1, NULL, 'm' },
+       { "mode"   , 1, NULL, 'm' },
        { "parents", 0, NULL, 'p' },
 #if ENABLE_SELINUX
        { "context", 1, NULL, 'Z' },
 #endif
-       { 0, 0, 0, 0 }
+       { NULL, 0, NULL, 0 }
 };
 #endif
 
index 6d8aa413ec00f6c0ca570779a1fe6cd1ff171776..7dcc50fa90d4ede73d802cea5abf218da7e06e94 100644 (file)
@@ -10,9 +10,6 @@
 /* BB_AUDIT SUSv3 compliant */
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/mkfifo.html */
 
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
 #include "busybox.h"
 #include "libcoreutils/coreutils.h"
 
@@ -24,7 +21,8 @@ int mkfifo_main(int argc, char **argv)
 
        mode = getopt_mk_fifo_nod(argc, argv);
 
-       if (!*(argv += optind)) {
+       argv += optind;
+       if (!*argv) {
                bb_show_usage();
        }
 
index d96f6a8e5219fb67b9624b7d47884ec2c7beee8f..a93b8f115612dd50e4c04a1d11eef2a29ade9ed6 100644 (file)
@@ -7,10 +7,10 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int pwd_main(int argc, char **argv);
 int pwd_main(int argc, char **argv)
 {
@@ -19,7 +19,8 @@ int pwd_main(int argc, char **argv)
        buf = xrealloc_getcwd_or_warn(NULL);
        if (buf != NULL) {
                puts(buf);
-               fflush_stdout_and_exit(EXIT_SUCCESS);
+               free(buf);
+               return fflush(stdout);
        }
 
        return EXIT_FAILURE;
index 1883feed8d1f679af6d2ab8b3350f37781c53d3c..6f32e7dc5e72a40aa5e867ef542ae992b2f5e082 100644 (file)
  * Size reduction.
  */
 
-#include <unistd.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int rm_main(int argc, char **argv);
 int rm_main(int argc, char **argv)
 {
@@ -27,14 +28,15 @@ int rm_main(int argc, char **argv)
 
        opt_complementary = "f-i:i-f";
        opt = getopt32(argc, argv, "fiRr");
+       argv += optind;
        if(opt & 1)
-                               flags |= FILEUTILS_FORCE;
+               flags |= FILEUTILS_FORCE;
        if(opt & 2)
                flags |= FILEUTILS_INTERACTIVE;
        if(opt & 12)
                flags |= FILEUTILS_RECUR;
 
-       if (*(argv += optind) != NULL) {
+       if (*argv != NULL) {
                do {
                        const char *base = bb_get_last_path_component(*argv);
 
index 8cbd6f1fa2a1706527c167cbec6bbc8c804f58ac..7f3253017f40cec6351748d7109adc38c33c2bd5 100644 (file)
 /* BB_AUDIT SUSv3 compliant */
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/rmdir.html */
 
-#include <stdlib.h>
-#include <unistd.h>
 #include <libgen.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
+
 int rmdir_main(int argc, char **argv);
 int rmdir_main(int argc, char **argv)
 {
@@ -24,7 +25,6 @@ int rmdir_main(int argc, char **argv)
        char *path;
 
        flags = getopt32(argc, argv, "p");
-
        argv += optind;
 
        if (!*argv) {
@@ -37,7 +37,7 @@ int rmdir_main(int argc, char **argv)
                /* Record if the first char was a '.' so we can use dirname later. */
                do_dot = (*path == '.');
 
-               do {
+               while (1) {
                        if (rmdir(path) < 0) {
                                bb_perror_msg("'%s'", path);    /* Match gnu rmdir msg. */
                                status = EXIT_FAILURE;
@@ -53,7 +53,7 @@ int rmdir_main(int argc, char **argv)
                                }
                        }
                        break;
-               } while (1);
+               }
 
        } while (*++argv);
 
index e81a4660ad5e8d47750248761d1d3f02e12b9b70..ef884d6aee9d7b12f5644785ceb1beb72de44c12 100644 (file)
@@ -7,21 +7,22 @@
  * Licensed under the GPL v2, see the file LICENSE in this tarball.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
+
 int seq_main(int argc, char **argv);
 int seq_main(int argc, char **argv)
 {
-       double last, first, increment, i;
+       double last, increment, i;
 
-       first = increment = 1;
+       i = increment = 1;
        switch (argc) {
                case 4:
                        increment = atof(argv[2]);
                case 3:
-                       first = atof(argv[1]);
+                       i = atof(argv[1]);
                case 2:
                        last = atof(argv[argc-1]);
                        break;
@@ -30,12 +31,10 @@ int seq_main(int argc, char **argv)
        }
 
        /* You should note that this is pos-5.0.91 semantics, -- FK. */
-       for (i = first;
-               (increment > 0 && i <= last) || (increment < 0 && i >=last);
-               i += increment)
-       {
+       while ((increment > 0 && i <= last) || (increment < 0 && i >= last)) {
                printf("%g\n", i);
+               i += increment;
        }
 
-       return EXIT_SUCCESS;
+       return fflush(stdout);
 }
index b89b0fe9ca488ac59671712cfa91823b599b9d27..592005babf7f377f885b5a412db6ce036cf5adae 100644 (file)
  * time suffixes for seconds, minutes, hours, and days.
  */
 
-#include <stdlib.h>
-#include <limits.h>
-#include <unistd.h>
 #include "busybox.h"
 
-#ifdef CONFIG_FEATURE_FANCY_SLEEP
+/* This is a NOFORK applet. Be very careful! */
+
+
+#if ENABLE_FEATURE_FANCY_SLEEP
 static const struct suffix_mult sfx[] = {
        { "s", 1 },
        { "m", 60 },
@@ -36,9 +36,9 @@ static const struct suffix_mult sfx[] = {
 int sleep_main(int argc, char **argv);
 int sleep_main(int argc, char **argv)
 {
-       unsigned int duration;
+       unsigned duration;
 
-#ifdef CONFIG_FEATURE_FANCY_SLEEP
+#if ENABLE_FEATURE_FANCY_SLEEP
 
        if (argc < 2) {
                bb_show_usage();
@@ -50,7 +50,7 @@ int sleep_main(int argc, char **argv)
                duration += xatoul_range_sfx(*argv, 0, UINT_MAX-duration, sfx);
        } while (*++argv);
 
-#else  /* CONFIG_FEATURE_FANCY_SLEEP */
+#else  /* FEATURE_FANCY_SLEEP */
 
        if (argc != 2) {
                bb_show_usage();
@@ -58,7 +58,7 @@ int sleep_main(int argc, char **argv)
 
        duration = xatou(argv[1]);
 
-#endif /* CONFIG_FEATURE_FANCY_SLEEP */
+#endif /* FEATURE_FANCY_SLEEP */
 
        if (sleep(duration)) {
                bb_perror_nomsg_and_die();
index dad542964680d175fe5b20d37ae3b6b3e365275e..06a6cbf7015db298efdad0cd095c773a82bb316a 100644 (file)
@@ -14,6 +14,9 @@
 
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 /*
        sort [-m][-o output][-bdfinru][-t char][-k keydef]... [file...]
        sort -c [-bdfinru][-t char][-k keydef][file]
index 536c57a171cbe7c0cf910d8987b508ea214e7ee2..e52ab768d55d97023145a79cb19c4d0305fb7d8f 100644 (file)
@@ -9,10 +9,10 @@
 
 /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
 
-#include <stdlib.h>
-#include <unistd.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int sync_main(int argc, char **argv);
 int sync_main(int argc, char **argv)
 {
index d5babefcea1ea524f1527f1858aee143dfb92f45..e9b6276383cf8e3cd5ef5359a52786d07691e25a 100644 (file)
  */
 
 #include "busybox.h"
-#include <unistd.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
 #include <setjmp.h>
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 /* test(1) accepts the following grammar:
        oexpr   ::= aexpr | aexpr "-o" oexpr ;
        aexpr   ::= nexpr | nexpr "-a" aexpr ;
index b2f3a9bade193f35f59f7a86f081dd4f95df3a07..eee62133132582d5e8ff35a62453c21c24f60969 100644 (file)
 /* BB_AUDIT SUSv3 compliant */
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/true.html */
 
-#include <stdlib.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int true_main(int argc, char **argv);
 int true_main(int argc, char **argv)
 {
index c28aa33d7144c371994cf2e1aa22740186ab8e10..d4c179fca0f21f7f22bdd43be67e0371ff2cbc15 100644 (file)
@@ -10,9 +10,6 @@
 /* BB_AUDIT SUSv3 compliant */
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/tty.html */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
 #include "busybox.h"
 
 int tty_main(int argc, char **argv);
@@ -31,7 +28,8 @@ int tty_main(int argc, char **argv)
 
        retval = 0;
 
-       if ((s = ttyname(0)) == NULL) {
+       s = ttyname(0);
+       if (s == NULL) {
        /* According to SUSv3, ttyname can on fail with EBADF or ENOTTY.
         * We know the file descriptor is good, so failure means not a tty. */
                s = "not a tty";
index 7dd91463811e67f8e573d3d1a3e100b0d78344da..2baf2bc87e9b6e011f5d5a13199db48d5e406d2d 100644 (file)
@@ -9,11 +9,10 @@
 
 /* BB_AUDIT SUSv3 N/A -- Apparently a busybox extension. */
 
-#include <stdlib.h>
-#include <limits.h>
-#include <unistd.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int usleep_main(int argc, char **argv);
 int usleep_main(int argc, char **argv)
 {
index 3185817b6bd4a3e14e7db26ec9efffb828626993..25757f633b25b9eb003f74c736fa74ff6da9aa4a 100644 (file)
@@ -9,11 +9,10 @@
 
 /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int whoami_main(int argc, char **argv);
 int whoami_main(int argc, char **argv)
 {
@@ -21,6 +20,6 @@ int whoami_main(int argc, char **argv)
                bb_show_usage();
 
        puts(bb_getpwuid(NULL, geteuid(), -1));
-       /* exits on error */
-       fflush_stdout_and_exit(EXIT_SUCCESS);
+
+       return fflush(stdout);
 }
index 2611c3e82c34eba640074e786c09b5ba6551865f..569764150aff203a7b8580a2aaf1a1dbc2868bc7 100644 (file)
 
 #include "busybox.h"
 
+/* This is a NOFORK applet. Be very careful! */
+
 int yes_main(int argc, char **argv);
 int yes_main(int argc, char **argv)
 {
-       static const char fmt_str[] = " %s";
-       const char *fmt;
        char **first_arg;
 
-       *argv = (char*)"y";
+       argv[0] = (char*)"y";
        if (argc != 1) {
                ++argv;
        }
 
        first_arg = argv;
        do {
-               fmt = fmt_str + 1;
-               do {
-                       printf(fmt, *argv);
-                       fmt = fmt_str;
-               } while (*++argv);
+               while (1) {
+                       fputs(*argv, stdout);
+                       if (!*++argv)
+                               break;
+                       putchar(' ');
+               }
                argv = first_arg;
        } while (putchar('\n') != EOF);
 
index f331a33fa8d502c6db44dd6aab0032284264e2d8..1bdb9b924e724e665a5b0fb10a6ab48c61d5fff2 100644 (file)
@@ -11,6 +11,8 @@
 #include "xregex.h"
 #include <math.h>
 
+/* This is a NOEXEC applet. Be very careful! */
+
 
 #define        MAXVARFMT       240
 #define        MINNVBLOCK      64
index 1a1301b38c1d33f2651eea265a7199e956a1d3db..b77d36dc3b70c737885bbcb324610e6e2b17694a 100644 (file)
@@ -48,6 +48,9 @@
 #include <fnmatch.h>
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 USE_FEATURE_FIND_XDEV(static dev_t *xdev_dev;)
 USE_FEATURE_FIND_XDEV(static int xdev_count;)
 
index b4dd9f876b4159c62c75007bb0d6541278c714b5..2b3a5081c6ad8d5076d18daa68473894cb7b62dd 100644 (file)
@@ -19,6 +19,9 @@
 
 #include "busybox.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 /* COMPAT:  SYSV version defaults size (and has a max value of) to 470.
    We try to make it as large as possible. */
 #if !defined(ARG_MAX) && defined(_SC_ARG_MAX)
index ecce32169733191a5bdf3506d41bca26105dfc69..b59d331838526300c1e49fdc3cfe7f9e0983ca92 100644 (file)
@@ -76,17 +76,17 @@ USE_ARP(APPLET(arp, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_ASH(APPLET_NOUSAGE(ash, ash, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_NEVER, awk))
-USE_BASENAME(APPLET(basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER, basename))
 USE_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_NEVER))
 //USE_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_BUNZIP2(APPLET(bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER, bzcat))
 USE_CAL(APPLET(cal, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_CAT(APPLET_NOEXEC(cat, cat, _BB_DIR_BIN, _BB_SUID_NEVER, cat))
+USE_CAT(APPLET_NOFORK(cat, cat, _BB_DIR_BIN, _BB_SUID_NEVER, cat))
 USE_CATV(APPLET(catv, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_CHATTR(APPLET(chattr, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_CHCON(APPLET(chcon, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_CHGRP(APPLET(chgrp, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_CHGRP(APPLET_NOEXEC(chgrp, chgrp, _BB_DIR_BIN, _BB_SUID_NEVER, chgrp))
 USE_CHMOD(APPLET_NOEXEC(chmod, chmod, _BB_DIR_BIN, _BB_SUID_NEVER, chmod))
 USE_CHOWN(APPLET_NOEXEC(chown, chown, _BB_DIR_BIN, _BB_SUID_NEVER, chown))
 USE_CHPST(APPLET(chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@@ -112,7 +112,7 @@ USE_DEVFSD(APPLET(devfsd, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_DF(APPLET(df, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_APP_DHCPRELAY(APPLET(dhcprelay, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_DIFF(APPLET(diff, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_DIRNAME(APPLET(dirname, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_DIRNAME(APPLET_NOFORK(dirname, dirname, _BB_DIR_USR_BIN, _BB_SUID_NEVER, dirname))
 USE_DMESG(APPLET(dmesg, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_DNSD(APPLET(dnsd, _BB_DIR_USR_SBIN, _BB_SUID_ALWAYS))
 USE_DOS2UNIX(APPLET(dos2unix, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@@ -133,7 +133,7 @@ USE_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER,
 USE_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, _BB_DIR_USR_BIN, _BB_SUID_NEVER, ether_wake))
 USE_EXPR(APPLET(expr, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_FAKEIDENTD(APPLET(fakeidentd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
-USE_FALSE(APPLET(false, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_FALSE(APPLET_NOFORK(false, false, _BB_DIR_BIN, _BB_SUID_NEVER, false))
 USE_FBSET(APPLET(fbset, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, _BB_DIR_BIN, _BB_SUID_NEVER, fdflush))
 USE_FDFORMAT(APPLET(fdformat, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@@ -162,7 +162,7 @@ USE_HALT(APPLET(halt, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_HDPARM(APPLET(hdparm, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_HEAD(APPLET(head, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, _BB_DIR_USR_BIN, _BB_SUID_NEVER, hexdump))
-USE_HOSTID(APPLET(hostid, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_HOSTID(APPLET_NOFORK(hostid, hostid, _BB_DIR_USR_BIN, _BB_SUID_NEVER, hostid))
 USE_HOSTNAME(APPLET(hostname, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_HTTPD(APPLET(httpd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_HUSH(APPLET_NOUSAGE(hush, hush, _BB_DIR_BIN, _BB_SUID_NEVER))
@@ -190,7 +190,7 @@ USE_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_NEVER, kil
 USE_KLOGD(APPLET(klogd, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_LASH(APPLET(lash, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_LAST(APPLET(last, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_LENGTH(APPLET(length, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_LENGTH(APPLET_NOFORK(length, length, _BB_DIR_USR_BIN, _BB_SUID_NEVER, length))
 USE_LESS(APPLET(less, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_SETARCH(APPLET_NOUSAGE(linux32, setarch, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_SETARCH(APPLET_NOUSAGE(linux64, setarch, _BB_DIR_BIN, _BB_SUID_NEVER))
@@ -201,7 +201,7 @@ USE_LOADFONT(APPLET(loadfont, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_LOADKMAP(APPLET(loadkmap, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_LOGGER(APPLET(logger, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_LOGIN(APPLET(login, _BB_DIR_BIN, _BB_SUID_ALWAYS))
-USE_LOGNAME(APPLET(logname, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_NEVER, logname))
 USE_LOGREAD(APPLET(logread, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_LOSETUP(APPLET(losetup, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_LS(APPLET_NOEXEC(ls, ls, _BB_DIR_BIN, _BB_SUID_NEVER, ls))
@@ -213,7 +213,7 @@ USE_MAKEDEVS(APPLET(makedevs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_MD5SUM(APPLET_ODDNAME(md5sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_NEVER, md5sum))
 USE_MDEV(APPLET(mdev, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_MESG(APPLET(mesg, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_MKDIR(APPLET_NOEXEC(mkdir, mkdir, _BB_DIR_BIN, _BB_SUID_NEVER, mkdir))
+USE_MKDIR(APPLET_NOFORK(mkdir, mkdir, _BB_DIR_BIN, _BB_SUID_NEVER, mkdir))
 //USE_MKE2FS(APPLET(mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_MKFIFO(APPLET(mkfifo, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 //USE_MKE2FS(APPLET_NOUSAGE(mkfs.ext2, mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
@@ -249,7 +249,7 @@ USE_HALT(APPLET_ODDNAME(poweroff, halt, _BB_DIR_SBIN, _BB_SUID_NEVER, poweroff))
 USE_PRINTENV(APPLET(printenv, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_PRINTF(APPLET(printf, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_PS(APPLET(ps, _BB_DIR_BIN, _BB_SUID_NEVER))
-USE_PWD(APPLET(pwd, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_PWD(APPLET_NOFORK(pwd, pwd, _BB_DIR_BIN, _BB_SUID_NEVER, pwd))
 USE_RAIDAUTORUN(APPLET(raidautorun, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_RDATE(APPLET(rdate, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_READAHEAD(APPLET(readahead, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@@ -260,8 +260,8 @@ USE_HALT(APPLET_ODDNAME(reboot, halt, _BB_DIR_SBIN, _BB_SUID_NEVER, reboot))
 USE_RENICE(APPLET(renice, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_RESET(APPLET(reset, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_RESIZE(APPLET(resize, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_RM(APPLET_NOEXEC(rm, rm, _BB_DIR_BIN, _BB_SUID_NEVER, rm))
-USE_RMDIR(APPLET(rmdir, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_RM(APPLET_NOFORK(rm, rm, _BB_DIR_BIN, _BB_SUID_NEVER, rm))
+USE_RMDIR(APPLET_NOFORK(rmdir, rmdir, _BB_DIR_BIN, _BB_SUID_NEVER, rmdir))
 USE_RMMOD(APPLET(rmmod, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_ROUTE(APPLET(route, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_RPM(APPLET(rpm, _BB_DIR_BIN, _BB_SUID_NEVER))
@@ -274,7 +274,7 @@ USE_RUNSVDIR(APPLET(runsvdir, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_RX(APPLET(rx, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_SELINUXENABLED(APPLET(selinuxenabled, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_SED(APPLET(sed, _BB_DIR_BIN, _BB_SUID_NEVER))
-USE_SEQ(APPLET(seq, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_SEQ(APPLET_NOFORK(seq, seq, _BB_DIR_USR_BIN, _BB_SUID_NEVER, seq))
 USE_SETARCH(APPLET(setarch, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_SETCONSOLE(APPLET(setconsole, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_SETENFORCE(APPLET(setenforce, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
@@ -287,7 +287,7 @@ USE_FEATURE_SH_IS_HUSH(APPLET_NOUSAGE(sh, hush, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_FEATURE_SH_IS_LASH(APPLET_NOUSAGE(sh, lash, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_FEATURE_SH_IS_MSH(APPLET_NOUSAGE(sh, msh, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_SHA1SUM(APPLET_ODDNAME(sha1sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_NEVER, sha1sum))
-USE_SLEEP(APPLET(sleep, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_SLEEP(APPLET_NOFORK(sleep, sleep, _BB_DIR_BIN, _BB_SUID_NEVER, sleep))
 USE_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER, softlimit))
 USE_SORT(APPLET_NOEXEC(sort, sort, _BB_DIR_USR_BIN, _BB_SUID_NEVER, sort))
 USE_SPLIT(APPLET(split, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@@ -303,7 +303,7 @@ USE_SVLOGD(APPLET(svlogd, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, _BB_DIR_SBIN, _BB_SUID_NEVER,swapoff))
 USE_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, _BB_DIR_SBIN, _BB_SUID_NEVER, swapon))
 USE_SWITCH_ROOT(APPLET(switch_root, _BB_DIR_SBIN, _BB_SUID_NEVER))
-USE_SYNC(APPLET(sync, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_SYNC(APPLET_NOFORK(sync, sync, _BB_DIR_BIN, _BB_SUID_NEVER, sync))
 USE_BB_SYSCTL(APPLET(sysctl, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_SYSLOGD(APPLET(syslogd, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_TAIL(APPLET(tail, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@@ -322,7 +322,7 @@ USE_TOP(APPLET(top, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_TOUCH(APPLET_NOFORK(touch, touch, _BB_DIR_BIN, _BB_SUID_NEVER, touch))
 USE_TR(APPLET(tr, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_TRACEROUTE(APPLET(traceroute, _BB_DIR_USR_BIN, _BB_SUID_MAYBE))
-USE_TRUE(APPLET(true, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_TRUE(APPLET_NOFORK(true, true, _BB_DIR_BIN, _BB_SUID_NEVER, true))
 USE_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 //USE_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_APP_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_NEVER))
@@ -336,7 +336,7 @@ USE_UNIX2DOS(APPLET_ODDNAME(unix2dos, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_NEVER,
 USE_UNLZMA(APPLET(unlzma, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_UNZIP(APPLET(unzip, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_UPTIME(APPLET(uptime, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_USLEEP(APPLET(usleep, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_USLEEP(APPLET_NOFORK(usleep, usleep, _BB_DIR_BIN, _BB_SUID_NEVER, usleep))
 USE_UUDECODE(APPLET(uudecode, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_UUENCODE(APPLET(uuencode, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_VCONFIG(APPLET(vconfig, _BB_DIR_SBIN, _BB_SUID_NEVER))
@@ -348,9 +348,9 @@ USE_WC(APPLET(wc, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_WGET(APPLET(wget, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_WHICH(APPLET(which, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_WHO(APPLET(who, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_WHOAMI(APPLET(whoami, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_WHOAMI(APPLET_NOFORK(whoami, whoami, _BB_DIR_USR_BIN, _BB_SUID_NEVER, whoami))
 USE_XARGS(APPLET_NOEXEC(xargs, xargs, _BB_DIR_USR_BIN, _BB_SUID_NEVER, xargs))
-USE_YES(APPLET(yes, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+USE_YES(APPLET_NOFORK(yes, yes, _BB_DIR_USR_BIN, _BB_SUID_NEVER, yes))
 USE_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_NEVER, zcat))
 USE_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_NEVER))
 
index 805b80187ef6fd03d113575e9ccaea8222dc21f3..e0596d5f6dde18ed503e6ef81205e196ae09b1ac 100644 (file)
@@ -7,19 +7,15 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
 #include "libbb.h"
 
-
 #if BUFSIZ < 4096
 #undef BUFSIZ
 #define BUFSIZ 4096
 #endif
 
+/* Used by NOFORK applets (e.g. cat) - must be very careful
+ * when calling xfuncs, allocating memory, with signals, termios, etc... */
 
 static off_t bb_full_fd_action(int src_fd, int dst_fd, off_t size)
 {
@@ -27,7 +23,8 @@ static off_t bb_full_fd_action(int src_fd, int dst_fd, off_t size)
        off_t total = 0;
        RESERVE_CONFIG_BUFFER(buffer, BUFSIZ);
 
-       if (src_fd < 0) goto out;
+       if (src_fd < 0)
+               goto out;
 
        if (!size) {
                size = BUFSIZ;
index 6f44770c66bb2215977e9809adb420a37f8d2834..ae68222b4b10f886118d4ebe9057a0229e7deb64 100644 (file)
 
 #include "libbb.h"
 
+// TODO: make it safe to call from NOFORK applets
+// Currently, it can exit(0). Even if it is made to do longjmp trick
+// (see sleep_and_die internals), zero cannot be passed thru this way!
+
 void fflush_stdout_and_exit(int retval)
 {
        if (fflush(stdout))
index fbec4e20e3081816ac2708705ec0a5c5b62201e6..d540ad133dd913a1b1ab7ec42e01602009623c8e 100644 (file)
  * val.  Otherwise, pass -1 to get default permissions.
  */
 
-#include <errno.h>
-#include <unistd.h>
-#include <sys/stat.h>
 #include "libbb.h"
 
+/* This function is used from NOFORK applets. It must not allocate anything */
+
 int bb_make_directory (char *path, long mode, int flags)
 {
        mode_t mask;
index 3ab4eb6fcd9f9a6c6c4db789c2849b635bbfb92c..a31bd4bfd604cc950d50661fda58a79affed260e 100644 (file)
@@ -11,6 +11,8 @@
 
 #include "libbb.h"
 
+/* This function is used from NOFORK applets. It must not allocate anything */
+
 #define FILEMODEBITS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
 
 int bb_parse_mode(const char *s, mode_t *current_mode)
index 3aaaef8c7f0210f594e5630723b70c9a059ec64c..3edc91dae54d741f1919ece7e39d3340bbf7e4ef 100644 (file)
@@ -9,6 +9,8 @@
 
 #include "libbb.h"
 
+/* Used from NOFORK applets. Must not allocate anything */
+
 int remove_file(const char *path, int flags)
 {
        struct stat path_stat;
index cddd185e275575b74283d0c1c20d4250c9ef9d7c..85a449038025c37f7952f407a0412141cf0da7a4 100644 (file)
@@ -9,10 +9,13 @@
  * Licensed under GPLv2 or later, see file License in this tarball for details.
  */
 
-#include "busybox.h"
 #include <getopt.h>
+#include "busybox.h"
 #include "dump.h"
 
+/* This is a NOEXEC applet. Be very careful! */
+
+
 static void bb_dump_addfile(char *name)
 {
        char *p;
@@ -45,10 +48,10 @@ static const char add_first[] = "\"%07.7_Ax\n\"";
 static const char hexdump_opts[] = "bcdoxCe:f:n:s:v";
 
 static const struct suffix_mult suffixes[] = {
-       {"b",  512 },
-       {"k",  1024 },
-       {"m",  1024*1024 },
-       {NULL, 0 }
+       { "b",  512 },
+       { "k",  1024 },
+       { "m",  1024*1024 },
+       { NULL, 0 }
 };
 
 int hexdump_main(int argc, char **argv);