diff options
-rw-r--r-- | archival/tar.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/archival/tar.c b/archival/tar.c index 0aa216c39..be59f0441 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -802,7 +802,7 @@ static const char tar_longopts[] ALIGN1 = #endif int tar_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int tar_main(int argc, char **argv) +int tar_main(int argc ATTRIBUTE_UNUSED, char **argv) { char (*get_header_ptr)(archive_handle_t *) = get_header_tar; archive_handle_t *tar_handle; @@ -852,6 +852,7 @@ int tar_main(int argc, char **argv) , &verboseFlag // combined count for -t and -v , &verboseFlag // combined count for -t and -v ); + argv += optind; if (verboseFlag) tar_handle->action_header = header_verbose_list; if (verboseFlag == 1) tar_handle->action_header = header_list; @@ -897,21 +898,15 @@ int tar_main(int argc, char **argv) tar_handle->accept = append_file_list_to_list(tar_handle->accept); #endif - /* Check if we are reading from stdin */ - if (argv[optind] && *argv[optind] == '-') { - /* Default is to read from stdin, so just skip to next arg */ - optind++; - } - /* Setup an array of filenames to work with */ /* TODO: This is the same as in ar, separate function ? */ - while (optind < argc) { + while (*argv) { /* kill trailing '/' unless the string is just "/" */ - char *cp = last_char_is(argv[optind], '/'); - if (cp > argv[optind]) + char *cp = last_char_is(*argv, '/'); + if (cp > *argv) *cp = '\0'; - llist_add_to_end(&tar_handle->accept, argv[optind]); - optind++; + llist_add_to_end(&tar_handle->accept, *argv); + argv++; } if (tar_handle->accept || tar_handle->reject) |