aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-10-19 00:46:35 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-10-19 00:46:35 +0000
commit98f824aa227e99891d9e65780197122772ca4dc2 (patch)
tree9f20996411cdc9a035d5cf5002e6c31863d035c8
parent934805aec1b666f347429324652f28af3206858d (diff)
downloadbusybox-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.c41
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}