diff options
-rw-r--r-- | archival/tar.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/archival/tar.c b/archival/tar.c index 6ef698edf..0f0d4fd6f 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -626,14 +626,6 @@ int tar_main(int argc, char **argv) tar_handle->src_fd = fileno(stdin); tar_handle->flags = ARCHIVE_CREATE_LEADING_DIRS; - /* Prepend '-' to the first argument if required */ - if (argv[1][0] != '-') { - char *tmp = xmalloc(strlen(argv[1]) + 2); - - tmp[0] = '-'; - strcpy(tmp + 1, argv[1]); - argv[1] = tmp; - } while ((opt = getopt(argc, argv, "ctxT:X:C:f:Opvz")) != -1) { switch (opt) { /* One and only one of these is required */ @@ -704,6 +696,10 @@ int tar_main(int argc, char **argv) } } + if (*argv[optind] == '-') { + optind++; + } + /* Setup an array of filenames to work with */ /* TODO: This is the same as in ar, seperate function ? */ while (optind < argc) { @@ -750,7 +746,9 @@ int tar_main(int argc, char **argv) while (get_header_tar(tar_handle) == EXIT_SUCCESS); #ifdef CONFIG_FEATURE_CLEAN_UP - close(tar_handle->src_fd); + if (tar_handle->src_fd != fileno(stdin)) { + close(tar_handle->src_fd); + } #endif return(EXIT_SUCCESS); |