ar: fix two bugs, one added by prev comment and other we SEGV with no params
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 4 Jan 2010 13:30:37 +0000 (14:30 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 4 Jan 2010 13:30:37 +0000 (14:30 +0100)
cpio: use optind less

function                                             old     new   delta
ar_main                                              189     184      -5
cpio_main                                            549     533     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-21)             Total: -21 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/ar.c
archival/cpio.c

index 1b43502ca4f0a83f00e9068293d232710e02a2c7..4f21bf82f2b3df6e5e490c6ac6a8090447dc900d 100644 (file)
@@ -49,7 +49,7 @@ int ar_main(int argc UNUSED_PARAM, char **argv)
        archive_handle = init_handle();
 
        /* Prepend '-' to the first argument if required */
-       opt_complementary = "--:p:t:x:-1:p--tx:t--px:x--pt";
+       opt_complementary = "--:-1:p:t:x:-1:p--tx:t--px:x--pt";
        opt = getopt32(argv, "ptxovcr");
        argv += optind;
 
@@ -75,7 +75,7 @@ int ar_main(int argc UNUSED_PARAM, char **argv)
                bb_error_msg_and_die(msg_unsupported_err, "insertion");
        }
 
-       archive_handle->src_fd = xopen(argv[optind++], O_RDONLY);
+       archive_handle->src_fd = xopen(*argv++, O_RDONLY);
 
        while (*argv) {
                archive_handle->filter = filter_accept_list;
index f139f313046661e60dc4a36e9e4f5a539281d153..5c16678e47bebf69e86bb49d7f0dbe8fc0365966 100644 (file)
@@ -307,16 +307,17 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
        opt = getopt32(argv, OPTION_STR, &cpio_filename);
 #else
        opt = getopt32(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), &cpio_filename, &cpio_fmt);
+       argv += optind;
        if (opt & CPIO_OPT_PASSTHROUGH) {
                pid_t pid;
                struct fd_pair pp;
 
-               if (argv[optind] == NULL)
+               if (argv[0] == NULL)
                        bb_show_usage();
                if (opt & CPIO_OPT_CREATE_LEADING_DIR)
-                       mkdir(argv[optind], 0777);
+                       mkdir(argv[0], 0777);
                /* Crude existence check:
-                * close(xopen(argv[optind], O_RDONLY | O_DIRECTORY));
+                * close(xopen(argv[0], O_RDONLY | O_DIRECTORY));
                 * We can also xopen, fstat, IS_DIR, later fchdir.
                 * This would check for existence earlier and cleaner.
                 * As it stands now, if we fail xchdir later,
@@ -335,14 +336,14 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
 #else
                xpiped_pair(pp);
 #endif
-               pid = fork_or_rexec(argv);
+               pid = fork_or_rexec(argv - optind);
                if (pid == 0) { /* child */
                        close(pp.rd);
                        xmove_fd(pp.wr, STDOUT_FILENO);
                        goto dump;
                }
                /* parent */
-               xchdir(argv[optind++]);
+               xchdir(*argv++);
                close(pp.wr);
                xmove_fd(pp.rd, STDIN_FILENO);
                opt &= ~CPIO_OPT_PASSTHROUGH;
@@ -361,7 +362,6 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
        }
  skip:
 #endif
-       argv += optind;
 
        archive_handle = init_handle();
        archive_handle->src_fd = STDIN_FILENO;
@@ -407,7 +407,7 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
 
        while (*argv) {
                archive_handle->filter = filter_accept_list;
-               llist_add_to(&(archive_handle->accept), *argv);
+               llist_add_to(&archive_handle->accept, *argv);
                argv++;
        }