diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2002-10-19 00:46:35 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2002-10-19 00:46:35 +0000 |
commit | 98f824aa227e99891d9e65780197122772ca4dc2 (patch) | |
tree | 9f20996411cdc9a035d5cf5002e6c31863d035c8 | |
parent | 934805aec1b666f347429324652f28af3206858d (diff) | |
download | busybox-w32-98f824aa227e99891d9e65780197122772ca4dc2.tar.gz busybox-w32-98f824aa227e99891d9e65780197122772ca4dc2.tar.bz2 busybox-w32-98f824aa227e99891d9e65780197122772ca4dc2.zip |
Dont use absolute pathname (dunno why i did that), fix tar filename/stdin problems
-rw-r--r-- | archival/tar.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/archival/tar.c b/archival/tar.c index a34eb3ca1..993478a67 100644 --- a/archival/tar.c +++ b/archival/tar.c | |||
@@ -609,9 +609,9 @@ int tar_main(int argc, char **argv) | |||
609 | archive_handle_t *tar_handle; | 609 | archive_handle_t *tar_handle; |
610 | int opt; | 610 | int opt; |
611 | char *base_dir = NULL; | 611 | char *base_dir = NULL; |
612 | char *tar_filename = "-"; | ||
612 | 613 | ||
613 | #ifdef CONFIG_FEATURE_TAR_CREATE | 614 | #ifdef CONFIG_FEATURE_TAR_CREATE |
614 | char *src_filename = NULL; | ||
615 | unsigned char tar_create = FALSE; | 615 | unsigned char tar_create = FALSE; |
616 | #endif | 616 | #endif |
617 | 617 | ||
@@ -629,7 +629,6 @@ int tar_main(int argc, char **argv) | |||
629 | 629 | ||
630 | /* Initialise default values */ | 630 | /* Initialise default values */ |
631 | tar_handle = init_handle(); | 631 | tar_handle = init_handle(); |
632 | tar_handle->src_fd = fileno(stdin); | ||
633 | tar_handle->flags = ARCHIVE_CREATE_LEADING_DIRS; | 632 | tar_handle->flags = ARCHIVE_CREATE_LEADING_DIRS; |
634 | 633 | ||
635 | while ((opt = getopt(argc, argv, "ctxT:X:C:f:Opvz")) != -1) { | 634 | while ((opt = getopt(argc, argv, "ctxT:X:C:f:Opvz")) != -1) { |
@@ -667,10 +666,7 @@ int tar_main(int argc, char **argv) | |||
667 | base_dir = optarg; | 666 | base_dir = optarg; |
668 | break; | 667 | break; |
669 | case 'f': /* archive filename */ | 668 | case 'f': /* archive filename */ |
670 | #ifdef CONFIG_FEATURE_TAR_CREATE | 669 | tar_filename = optarg; |
671 | src_filename = optarg; | ||
672 | #endif | ||
673 | tar_handle->src_fd = xopen(optarg, O_RDONLY); | ||
674 | break; | 670 | break; |
675 | case 'O': /* To stdout */ | 671 | case 'O': /* To stdout */ |
676 | tar_handle->action_data = data_extract_to_stdout; | 672 | tar_handle->action_data = data_extract_to_stdout; |
@@ -711,22 +707,26 @@ int tar_main(int argc, char **argv) | |||
711 | /* Setup an array of filenames to work with */ | 707 | /* Setup an array of filenames to work with */ |
712 | /* TODO: This is the same as in ar, seperate function ? */ | 708 | /* TODO: This is the same as in ar, seperate function ? */ |
713 | while (optind < argc) { | 709 | while (optind < argc) { |
710 | #if 0 | ||
714 | char absolute_path[PATH_MAX]; | 711 | char absolute_path[PATH_MAX]; |
715 | |||
716 | realpath(argv[optind], absolute_path); | 712 | realpath(argv[optind], absolute_path); |
717 | tar_handle->accept = add_to_list(tar_handle->accept, absolute_path); | 713 | tar_handle->accept = add_to_list(tar_handle->accept, absolute_path); |
714 | #endif | ||
715 | tar_handle->accept = add_to_list(tar_handle->accept, argv[optind]); | ||
718 | optind++; | 716 | optind++; |
717 | |||
719 | #ifdef CONFIG_FEATURE_TAR_EXCLUDE | 718 | #ifdef CONFIG_FEATURE_TAR_EXCLUDE |
720 | if (tar_handle->reject) { | 719 | if (tar_handle->reject) { |
721 | tar_handle->filter = filter_accept_reject_list; | 720 | tar_handle->filter = filter_accept_reject_list; |
722 | } else | 721 | } else |
723 | #endif | 722 | #endif /* CONFIG_FEATURE_TAR_EXCLUDE */ |
723 | |||
724 | tar_handle->filter = filter_accept_list; | 724 | tar_handle->filter = filter_accept_list; |
725 | } | 725 | } |
726 | 726 | ||
727 | if ((base_dir) && (chdir(base_dir))) { | 727 | if ((base_dir) && (chdir(base_dir))) { |
728 | perror_msg_and_die("Couldnt chdir"); | 728 | perror_msg_and_die("Couldnt chdir"); |
729 | } | 729 | } |
730 | 730 | ||
731 | #ifdef CONFIG_FEATURE_TAR_CREATE | 731 | #ifdef CONFIG_FEATURE_TAR_CREATE |
732 | /* create an archive */ | 732 | /* create an archive */ |
@@ -738,26 +738,35 @@ int tar_main(int argc, char **argv) | |||
738 | if (get_header_ptr == get_header_tar_gz) { | 738 | if (get_header_ptr == get_header_tar_gz) { |
739 | gzipFlag = TRUE; | 739 | gzipFlag = TRUE; |
740 | } | 740 | } |
741 | # endif | 741 | # endif /* CONFIG_FEATURE_TAR_GZIP */ |
742 | |||
742 | if (tar_handle->action_header == header_verbose_list) { | 743 | if (tar_handle->action_header == header_verbose_list) { |
743 | verboseFlag = TRUE; | 744 | verboseFlag = TRUE; |
744 | } | 745 | } |
745 | writeTarFile(src_filename, verboseFlag, tar_handle->accept, | 746 | writeTarFile(tar_filename, verboseFlag, tar_handle->accept, |
746 | tar_handle->reject, gzipFlag); | 747 | tar_handle->reject, gzipFlag); |
747 | } else | 748 | } else |
748 | #endif | 749 | #endif /* CONFIG_FEATURE_TAR_CREATE */ |
750 | { | ||
751 | if ((tar_filename[0] == '-') && (tar_filename[1] == '\0')) { | ||
752 | tar_handle->src_fd = fileno(stdin); | ||
753 | } else { | ||
754 | tar_handle->src_fd = xopen(tar_filename, O_RDONLY); | ||
755 | } | ||
749 | #ifdef CONFIG_FEATURE_TAR_GZIP | 756 | #ifdef CONFIG_FEATURE_TAR_GZIP |
750 | if (get_header_ptr == get_header_tar_gz) { | 757 | if (get_header_ptr == get_header_tar_gz) { |
751 | get_header_tar_gz(tar_handle); | 758 | get_header_tar_gz(tar_handle); |
752 | } else | 759 | } else |
753 | #endif | 760 | #endif /* CONFIG_FEATURE_TAR_CREATE */ |
761 | |||
754 | while (get_header_tar(tar_handle) == EXIT_SUCCESS); | 762 | while (get_header_tar(tar_handle) == EXIT_SUCCESS); |
763 | } | ||
755 | 764 | ||
756 | #ifdef CONFIG_FEATURE_CLEAN_UP | 765 | #ifdef CONFIG_FEATURE_CLEAN_UP |
757 | if (tar_handle->src_fd != fileno(stdin)) { | 766 | if (tar_handle->src_fd != fileno(stdin)) { |
758 | close(tar_handle->src_fd); | 767 | close(tar_handle->src_fd); |
759 | } | 768 | } |
760 | #endif | 769 | #endif /* CONFIG_FEATURE_CLEAN_UP */ |
761 | 770 | ||
762 | return(EXIT_SUCCESS); | 771 | return(EXIT_SUCCESS); |
763 | } | 772 | } |