[git commit master] ar: fix two bugs, one added by prev comment and other we SEGV with no params

Denys Vlasenko vda.linux at googlemail.com
Mon Jan 4 13:30:37 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=40e5a30b66b51440f92826683c833ae23765390a
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at googlemail.com>
---
 archival/ar.c   |    4 ++--
 archival/cpio.c |   14 +++++++-------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/archival/ar.c b/archival/ar.c
index 1b43502..4f21bf8 100644
--- a/archival/ar.c
+++ b/archival/ar.c
@@ -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;
diff --git a/archival/cpio.c b/archival/cpio.c
index f139f31..5c16678 100644
--- a/archival/cpio.c
+++ b/archival/cpio.c
@@ -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++;
 	}
 
-- 
1.6.3.3



More information about the busybox-cvs mailing list