diff options
author | Matt Kraai | 2001-12-20 22:09:31 +0000 |
---|---|---|
committer | Matt Kraai | 2001-12-20 22:09:31 +0000 |
commit | 2b1effdbbccf8f16ae3fed93d3178759a44d33d9 (patch) | |
tree | 53e02a8ad30b981e748925c8943ed3f52451e0c6 /archival | |
parent | c5b5cab37d37a6dafa3c1e6b97401aca6e071b03 (diff) | |
download | busybox-2b1effdbbccf8f16ae3fed93d3178759a44d33d9.zip busybox-2b1effdbbccf8f16ae3fed93d3178759a44d33d9.tar.gz |
Write files when extracting an archive from standard input.
Diffstat (limited to 'archival')
-rw-r--r-- | archival/tar.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/archival/tar.c b/archival/tar.c index 9792f6b..8720144 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -459,7 +459,7 @@ static int writeTarFile(const char* tarName, int verboseFlag, char **argv, error_msg_and_die("Cowardly refusing to create an empty archive"); /* Open the tar file for writing. */ - if (tarName == NULL || !strcmp(tarName, "-")) + if (tarName == NULL) tbInfo.tarFd = fileno(stdout); else tbInfo.tarFd = open (tarName, O_WRONLY | O_CREAT | O_TRUNC, 0644); @@ -573,14 +573,12 @@ char **list_and_not_list(char **include_list, char **exclude_list) int tar_main(int argc, char **argv) { enum untar_funct_e { - /* These are optional */ - untar_from_file = 1, - untar_from_stdin = 2, - untar_unzip = 4, + /* This is optional */ + untar_unzip = 1, /* Require one and only one of these */ - untar_list = 8, - untar_create = 16, - untar_extract = 32 + untar_list = 2, + untar_create = 4, + untar_extract = 8 }; FILE *src_stream = NULL; @@ -649,10 +647,8 @@ int tar_main(int argc, char **argv) break; case 'f': // archive filename if (strcmp(optarg, "-") == 0) { - // Untar from stdin to stdout - untar_funct |= untar_from_stdin; + src_filename = NULL; } else { - untar_funct |= untar_from_file; src_filename = xstrdup(optarg); } break; @@ -694,17 +690,13 @@ int tar_main(int argc, char **argv) optind++; } - if (src_filename == NULL) { - extract_function |= extract_to_stdout; - } - if (extract_function & (extract_list | extract_all_to_fs)) { if (dst_prefix == NULL) { dst_prefix = xstrdup("./"); } /* Setup the source of the tar data */ - if (untar_funct & untar_from_file) { + if (src_filename != NULL) { src_stream = xfopen(src_filename, "r"); } else { src_stream = stdin; |