diff options
author | Glenn L McGrath | 2002-09-28 02:06:39 +0000 |
---|---|---|
committer | Glenn L McGrath | 2002-09-28 02:06:39 +0000 |
commit | 8132e933e6cf0e6bffccb1902f872b584a32c580 (patch) | |
tree | 630493464ea2911161899635bd97a40c713d2781 /archival | |
parent | 92052e3945820f50e71737658997cc35ed287105 (diff) | |
download | busybox-8132e933e6cf0e6bffccb1902f872b584a32c580.zip busybox-8132e933e6cf0e6bffccb1902f872b584a32c580.tar.gz |
Fix for using '-' as the filename when reading from stdin
Diffstat (limited to 'archival')
-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 6ef698e..0f0d4fd 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); |