diff options
author | Denys Vlasenko | 2010-01-04 14:30:37 +0100 |
---|---|---|
committer | Denys Vlasenko | 2010-01-04 14:30:37 +0100 |
commit | 40e5a30b66b51440f92826683c833ae23765390a (patch) | |
tree | 9ef02ecdcef5c63acfb633a8ed75fcc10ea642c7 /archival/cpio.c | |
parent | 2ec91aead52d6ea6a42420005119ebb281a76cdc (diff) | |
download | busybox-40e5a30b66b51440f92826683c833ae23765390a.zip busybox-40e5a30b66b51440f92826683c833ae23765390a.tar.gz |
ar: fix two bugs, one added by prev comment and other we SEGV with no params
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>
Diffstat (limited to 'archival/cpio.c')
-rw-r--r-- | archival/cpio.c | 14 |
1 files changed, 7 insertions, 7 deletions
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++; } |