*: remove a few more cases of argc usage. -89 bytes.
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 28 Nov 2009 14:18:53 +0000 (15:18 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 28 Nov 2009 14:18:53 +0000 (15:18 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
20 files changed:
console-tools/chvt.c
coreutils/chroot.c
coreutils/df.c
coreutils/dirname.c
coreutils/dos2unix.c
coreutils/ln.c
coreutils/mkdir.c
coreutils/nohup.c
coreutils/stat.c
coreutils/stty.c
coreutils/yes.c
include/libbb.h
libbb/Kbuild
libbb/single_argv.c [new file with mode: 0644]
miscutils/adjtimex.c
miscutils/raidautorun.c
miscutils/rx.c
runit/runsv.c
util-linux/fdisk.c
util-linux/freeramdisk.c

index 302ffb4f914fa300f8f1f2d0ec9c2bcee9e9219c..977c26905e8e5e1906da251f06868058ccafc8fe 100644 (file)
@@ -6,19 +6,12 @@
  *
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
-
 #include "libbb.h"
 
 int chvt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int chvt_main(int argc, char **argv)
+int chvt_main(int argc UNUSED_PARAM, char **argv)
 {
-       int num;
-
-       if (argc != 2) {
-               bb_show_usage();
-       }
-
-       num = xatou_range(argv[1], 1, 63);
+       int num = xatou_range(single_argv(argv), 1, 63);
        console_make_active(get_console_fd_or_die(), num);
        return EXIT_SUCCESS;
 }
index 9b3d700444cd47749142029b0d5ad298b518e376..f7228a61ae4ef904d86a30e1aa63b58b35d6089b 100644 (file)
 #include "libbb.h"
 
 int chroot_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int chroot_main(int argc, char **argv)
+int chroot_main(int argc UNUSED_PARAM, char **argv)
 {
-       if (argc < 2) {
-               bb_show_usage();
-       }
-
        ++argv;
+       if (!*argv)
+               bb_show_usage();
        xchroot(*argv);
        xchdir("/");
 
        ++argv;
-       if (argc == 2) {
+       if (!*argv) { /* no 2nd param (PROG), use shell */
                argv -= 2;
                argv[0] = getenv("SHELL");
                if (!argv[0]) {
index a0e6fe0700a51e63c294aed3143a98613bf8bf70..11a739816f1cff86f8c2e88319eeb61f99e842f1 100644 (file)
@@ -35,7 +35,7 @@ static unsigned long kscale(unsigned long b, unsigned long bs)
 #endif
 
 int df_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int df_main(int argc, char **argv)
+int df_main(int argc UNUSED_PARAM, char **argv)
 {
        unsigned long blocks_used;
        unsigned blocks_percent_used;
@@ -105,7 +105,7 @@ int df_main(int argc, char **argv)
 
        mount_table = NULL;
        argv += optind;
-       if (optind >= argc) {
+       if (!argv[0]) {
                mount_table = setmntent(bb_path_mtab_file, "r");
                if (!mount_table)
                        bb_perror_msg_and_die(bb_path_mtab_file);
index 1f5f70dfd0974baa346bc7353a2b1fc111d35fc8..94c22a7eeb756accda53c5504114cd632a681fa0 100644 (file)
 /* This is a NOFORK applet. Be very careful! */
 
 int dirname_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int dirname_main(int argc, char **argv)
+int dirname_main(int argc UNUSED_PARAM, char **argv)
 {
-       if (argc != 2) {
-               bb_show_usage();
-       }
-
-       puts(dirname(argv[1]));
-
+       puts(dirname(single_argv(argv)));
        return fflush_all();
 }
index baf879e54fbee477e225b69951b71908ff64df1e..1911f5319bc545bb204332cb2c6810df63ea6c59 100644 (file)
@@ -69,7 +69,7 @@ static void convert(char *fn, int conv_type)
 }
 
 int dos2unix_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int dos2unix_main(int argc, char **argv)
+int dos2unix_main(int argc UNUSED_PARAM, char **argv)
 {
        int o, conv_type;
 
@@ -88,11 +88,11 @@ int dos2unix_main(int argc, char **argv)
        if (o)
                conv_type = o;
 
+       argv += optind;
        do {
                /* might be convert(NULL) if there is no filename given */
-               convert(argv[optind], conv_type);
-               optind++;
-       } while (optind < argc);
+               convert(*argv, conv_type);
+       } while (*++argv);
 
        return 0;
 }
index eb7171959cbe62b479753124fb817eda6df90309..f977aa17774d96a14c42b0ddc0110a7913541505 100644 (file)
@@ -26,7 +26,7 @@ int ln_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int ln_main(int argc, char **argv)
 {
        int status = EXIT_SUCCESS;
-       int flag;
+       int opts;
        char *last;
        char *src_name;
        char *src;
@@ -34,11 +34,8 @@ int ln_main(int argc, char **argv)
        struct stat statbuf;
        int (*link_func)(const char *, const char *);
 
-       flag = getopt32(argv, "sfnbS:", &suffix);
-
-       if (argc == optind) {
-               bb_show_usage();
-       }
+       opt_complementary = "-1"; /* min one arg */
+       opts = getopt32(argv, "sfnbS:", &suffix);
 
        last = argv[argc - 1];
        argv += optind;
@@ -53,7 +50,7 @@ int ln_main(int argc, char **argv)
                src = last;
 
                if (is_directory(src,
-                               (flag & LN_NODEREFERENCE) ^ LN_NODEREFERENCE,
+                               (opts & LN_NODEREFERENCE) ^ LN_NODEREFERENCE,
                                NULL)
                ) {
                        src_name = xstrdup(*argv);
@@ -61,7 +58,7 @@ int ln_main(int argc, char **argv)
                        free(src_name);
                        src_name = src;
                }
-               if (!(flag & LN_SYMLINK) && stat(*argv, &statbuf)) {
+               if (!(opts & LN_SYMLINK) && stat(*argv, &statbuf)) {
                        // coreutils: "ln dangling_symlink new_hardlink" works
                        if (lstat(*argv, &statbuf) || !S_ISLNK(statbuf.st_mode)) {
                                bb_simple_perror_msg(*argv);
@@ -71,7 +68,7 @@ int ln_main(int argc, char **argv)
                        }
                }
 
-               if (flag & LN_BACKUP) {
+               if (opts & LN_BACKUP) {
                        char *backup;
                        backup = xasprintf("%s%s", src, suffix);
                        if (rename(src, backup) < 0 && errno != ENOENT) {
@@ -87,12 +84,12 @@ int ln_main(int argc, char **argv)
                         * Therefore, always unlink().
                         */
                        unlink(src);
-               } else if (flag & LN_FORCE) {
+               } else if (opts & LN_FORCE) {
                        unlink(src);
                }
 
                link_func = link;
-               if (flag & LN_SYMLINK) {
+               if (opts & LN_SYMLINK) {
                        link_func = symlink;
                }
 
index a110165db322a33b653b8b645f2dfc9f54e2971a..c837e97267c6e8808305f3c6e03d4fdf02ef3f87 100644 (file)
@@ -34,7 +34,7 @@ static const char mkdir_longopts[] ALIGN1 =
 #endif
 
 int mkdir_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int mkdir_main(int argc, char **argv)
+int mkdir_main(int argc UNUSED_PARAM, char **argv)
 {
        mode_t mode = (mode_t)(-1);
        int status = EXIT_SUCCESS;
@@ -64,11 +64,9 @@ int mkdir_main(int argc, char **argv)
        }
 #endif
 
-       if (optind == argc) {
-               bb_show_usage();
-       }
-
        argv += optind;
+       if (!argv[0])
+               bb_show_usage();
 
        do {
                if (bb_make_directory(*argv, mode, flags)) {
index f44e2af610a46f474a72a4e0db71a5fa0b6aa630..c9e65d2ba75833be197e8be5bb7c3e222cb34b98 100644 (file)
@@ -32,14 +32,14 @@ nohup: redirecting stderr to stdout
 */
 
 int nohup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int nohup_main(int argc, char **argv)
+int nohup_main(int argc UNUSED_PARAM, char **argv)
 {
        const char *nohupout;
        char *home;
 
        xfunc_error_retval = 127;
 
-       if (argc < 2) bb_show_usage();
+       if (!argv[1]) bb_show_usage();
 
        /* If stdin is a tty, detach from it. */
        if (isatty(STDIN_FILENO)) {
index 2bc9a086cdcb1e2ac001f21bddb26326904e0262..bbd2e6a7cbb81281e3e6fe0a1de74b07f7791969 100644 (file)
@@ -640,29 +640,29 @@ static bool do_stat(const char *filename, const char *format)
 }
 
 int stat_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int stat_main(int argc, char **argv)
+int stat_main(int argc UNUSED_PARAM, char **argv)
 {
        IF_FEATURE_STAT_FORMAT(char *format = NULL;)
        int i;
-       int ok = 1;
+       int ok;
+       unsigned opts;
        statfunc_ptr statfunc = do_stat;
 
-       getopt32(argv, "ftL"
+       opt_complementary = "-1"; /* min one arg */
+       opts = getopt32(argv, "ftL"
                IF_SELINUX("Z")
                IF_FEATURE_STAT_FORMAT("c:", &format)
        );
-
-       if (option_mask32 & OPT_FILESYS) /* -f */
+       if (opts & OPT_FILESYS) /* -f */
                statfunc = do_statfs;
-       if (argc == optind)           /* files */
-               bb_show_usage();
-
 #if ENABLE_SELINUX
-       if (option_mask32 & OPT_SELINUX) {
+       if (opts & OPT_SELINUX) {
                selinux_or_die();
        }
-#endif /* ENABLE_SELINUX */
-       for (i = optind; i < argc; ++i)
+#endif
+       ok = 1;
+       argv += optind;
+       for (i = 0; argv[i]; ++i)
                ok &= statfunc(argv[i] IF_FEATURE_STAT_FORMAT(, format));
 
        return (ok ? EXIT_SUCCESS : EXIT_FAILURE);
index f29fa64f7b8a7b6b0766665bf6bc19800f905a15..0485b8011b0573ef49f93ff3637c2945d55b6e3c 100644 (file)
@@ -1156,7 +1156,7 @@ static void set_control_char_or_die(const struct control_info *info,
 #define STTY_noargs             (1 << 4)
 
 int stty_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int stty_main(int argc, char **argv)
+int stty_main(int argc UNUSED_PARAM, char **argv)
 {
        struct termios mode;
        void (*output_func)(const struct termios *, const int);
@@ -1211,8 +1211,10 @@ int stty_main(int argc, char **argv)
                                                if (!file_name)
                                                        bb_error_msg_and_die(bb_msg_requires_arg, "-F");
                                                /* remove -F param from arg[vc] */
-                                               --argc;
-                                               while (argv[p]) { argv[p] = argv[p+1]; ++p; }
+                                               while (argv[p]) {
+                                                       argv[p] = argv[p+1];
+                                                       ++p;
+                                               }
                                        }
                                        goto end_option;
                                default:
index 9d3f675501d5b41f525397532fa459b4432d47e8..d757a4504db1b247516ee3ea9645daee113b7b9b 100644 (file)
 /* This is a NOFORK applet. Be very careful! */
 
 int yes_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int yes_main(int argc, char **argv)
+int yes_main(int argc UNUSED_PARAM, char **argv)
 {
        char **pp;
 
        argv[0] = (char*)"y";
-       if (argc != 1) {
+       if (argv[1])
                ++argv;
-       }
 
        do {
                pp = argv;
index 1f39c95e168325896a7c3ae3d641747fb3d007bc..8d3df6191f83239146466a68359d5f00ccc16dce 100644 (file)
@@ -869,6 +869,7 @@ void bb_sanitize_stdio(void) FAST_FUNC;
 int sanitize_env_if_suid(void) FAST_FUNC;
 
 
+char* single_argv(char **argv) FAST_FUNC;
 extern const char *const bb_argv_dash[]; /* "-", NULL */
 extern const char *opt_complementary;
 #if ENABLE_LONG_OPTS || ENABLE_FEATURE_GETOPT_LONG
index d9d5ad7934125a1e557435df4d2d51f05faa1633..130ad25de9d08627714bf62a10fc957cd8c9ff36 100644 (file)
@@ -92,6 +92,7 @@ lib-y += setup_environment.o
 lib-y += sha1.o
 lib-y += signals.o
 lib-y += simplify_path.o
+lib-y += single_argv.o
 lib-y += skip_whitespace.o
 lib-y += speed_table.o
 lib-y += str_tolower.o
diff --git a/libbb/single_argv.c b/libbb/single_argv.c
new file mode 100644 (file)
index 0000000..6173c88
--- /dev/null
@@ -0,0 +1,16 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Utility routines.
+ *
+ * Copyright (C) 2009 Denys Vlasenko
+ *
+ * Licensed under GPLv2, see file LICENSE in this tarball for details.
+ */
+#include "libbb.h"
+
+char* FAST_FUNC single_argv(char **argv)
+{
+       if (!argv[1] || argv[2])
+               bb_show_usage();
+       return argv[1];
+}
index 07f083428c4996f05379e4a3e42a1fd355b4a288..c12a10b25f4c789d29e4f6cfb4abdd1c44dd19ef 100644 (file)
@@ -56,7 +56,7 @@ static const char ret_code_descript[] =
 ;
 
 int adjtimex_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int adjtimex_main(int argc, char **argv)
+int adjtimex_main(int argc UNUSED_PARAM, char **argv)
 {
        enum {
                OPT_quiet = 0x1
@@ -66,10 +66,11 @@ int adjtimex_main(int argc, char **argv)
        struct timex txc;
        int i, ret;
        const char *descript;
-       txc.modes=0;
 
+       opt_complementary = "=0"; /* no valid non-option parameters */
        opt = getopt32(argv, "qo:f:p:t:",
                        &opt_o, &opt_f, &opt_p, &opt_t);
+       txc.modes = 0;
        //if (opt & 0x1) // -q
        if (opt & 0x2) { // -o
                txc.offset = xatol(opt_o);
@@ -87,9 +88,6 @@ int adjtimex_main(int argc, char **argv)
                txc.tick = xatol(opt_t);
                txc.modes |= ADJ_TICK;
        }
-       if (argc != optind) { /* no valid non-option parameters */
-               bb_show_usage();
-       }
 
        ret = adjtimex(&txc);
 
index a2a852bbf2458b0e6b7cc384120f1c75e2f13a2a..113e49ff2ea20103e10e87e000d7082ad6868987 100644 (file)
 #include <linux/raid/md_u.h>
 
 int raidautorun_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int raidautorun_main(int argc, char **argv)
+int raidautorun_main(int argc UNUSED_PARAM, char **argv)
 {
-       if (argc != 2)
-               bb_show_usage();
-
-       xioctl(xopen(argv[1], O_RDONLY), RAID_AUTORUN, NULL);
-
+       xioctl(xopen(single_argv(argv), O_RDONLY), RAID_AUTORUN, NULL);
        return EXIT_SUCCESS;
 }
index 3a8b6a8feac9655f07a9d8cf4ae49217f9c7e69e..4c5d5a19c5dd29c7fdcc1b24d1908d67cd225bac 100644 (file)
@@ -234,21 +234,18 @@ static void sigalrm_handler(int UNUSED_PARAM signum)
 }
 
 int rx_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int rx_main(int argc, char **argv)
+int rx_main(int argc UNUSED_PARAM, char **argv)
 {
        struct termios tty, orig_tty;
        int termios_err;
        int file_fd;
        int n;
 
-       if (argc != 2)
-               bb_show_usage();
-
        /* Disabled by vda:
         * why we can't receive from stdin? Why we *require*
         * controlling tty?? */
        /*read_fd = xopen(CURRENT_TTY, O_RDWR);*/
-       file_fd = xopen(argv[1], O_RDWR|O_CREAT|O_TRUNC);
+       file_fd = xopen(single_argv(argv), O_RDWR|O_CREAT|O_TRUNC);
 
        termios_err = tcgetattr(read_fd, &tty);
        if (termios_err == 0) {
index 8b787543f1d67c740bf30f99fa930c48acc03a11..48b83960df3a99afaa6ddfe07804feefe8c655f1 100644 (file)
@@ -463,9 +463,7 @@ int runsv_main(int argc UNUSED_PARAM, char **argv)
 
        INIT_G();
 
-       if (!argv[1] || argv[2])
-               bb_show_usage();
-       dir = argv[1];
+       dir = single_argv(argv);
 
        xpiped_pair(selfpipe);
        close_on_exec_on(selfpipe.rd);
index 6a194fd1a6b9405a3e5e3344b5a5d788ecfe2582..c9f57c6d67c546ab6effaaf840568c54033f880e 100644 (file)
@@ -2821,7 +2821,7 @@ unknown_command(int c)
 #endif
 
 int fdisk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int fdisk_main(int argc, char **argv)
+int fdisk_main(int argc UNUSED_PARAM, char **argv)
 {
        unsigned opt;
        /*
@@ -2839,7 +2839,6 @@ int fdisk_main(int argc, char **argv)
        opt_complementary = "b+:C+:H+:S+"; /* numeric params */
        opt = getopt32(argv, "b:C:H:lS:u" IF_FEATURE_FDISK_BLKSIZE("s"),
                                &sector_size, &user_cylinders, &user_heads, &user_sectors);
-       argc -= optind;
        argv += optind;
        if (opt & OPT_b) { // -b
                /* Ugly: this sector size is really per device,
@@ -2883,14 +2882,14 @@ int fdisk_main(int argc, char **argv)
                int j;
 
                nowarn = 1;
-               if (argc <= 0)
+               if (!argv[0])
                        bb_show_usage();
-               for (j = 0; j < argc; j++) {
+               for (j = 0; argv[j]; j++) {
                        unsigned long long size;
                        fd = xopen(argv[j], O_RDONLY);
                        size = bb_BLKGETSIZE_sectors(fd) / 2;
                        close(fd);
-                       if (argc == 1)
+                       if (argv[1])
                                printf("%llu\n", size);
                        else
                                printf("%s: %llu\n", argv[j], size);
@@ -2900,7 +2899,7 @@ int fdisk_main(int argc, char **argv)
 #endif
 
 #if ENABLE_FEATURE_FDISK_WRITABLE
-       if (argc != 1)
+       if (!argv[0] || argv[1])
                bb_show_usage();
 
        disk_device = argv[0];
index 6b9d95e69963a163a63a55eecf3688130e163d29..4949056a6dae2eb81ae601d2ae5d746ab09c13cd 100644 (file)
 #define FDFLUSH  _IO(2,0x4b)
 
 int freeramdisk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int freeramdisk_main(int argc, char **argv)
+int freeramdisk_main(int argc UNUSED_PARAM, char **argv)
 {
        int fd;
 
-       if (argc != 2) bb_show_usage();
-
-       fd = xopen(argv[1], O_RDWR);
+       fd = xopen(single_argv(argv), O_RDWR);
 
        // Act like freeramdisk, fdflush, or both depending on configuration.
-       ioctl_or_perror_and_die(fd, (ENABLE_FREERAMDISK && applet_name[1]=='r')
+       ioctl_or_perror_and_die(fd, (ENABLE_FREERAMDISK && applet_name[1] == 'r')
                        || !ENABLE_FDFLUSH ? BLKFLSBUF : FDFLUSH, NULL, "%s", argv[1]);
 
        if (ENABLE_FEATURE_CLEAN_UP) close(fd);