summaryrefslogtreecommitdiff
path: root/archival
diff options
context:
space:
mode:
authorGlenn L McGrath2002-09-28 02:06:39 +0000
committerGlenn L McGrath2002-09-28 02:06:39 +0000
commit8132e933e6cf0e6bffccb1902f872b584a32c580 (patch)
tree630493464ea2911161899635bd97a40c713d2781 /archival
parent92052e3945820f50e71737658997cc35ed287105 (diff)
downloadbusybox-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.c16
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);