aboutsummaryrefslogtreecommitdiff
path: root/archival/tar.c
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2003-11-18 20:23:04 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2003-11-18 20:23:04 +0000
commit3b9fc8fe2a0fee6f1128f3f73ff408555ff45df8 (patch)
tree073b6ac0a1b25a951e6e1fb5cfbc18888d3c001a /archival/tar.c
parentde3ea9f049167fdd6813f53af23096b6110afe05 (diff)
downloadbusybox-w32-3b9fc8fe2a0fee6f1128f3f73ff408555ff45df8.tar.gz
busybox-w32-3b9fc8fe2a0fee6f1128f3f73ff408555ff45df8.tar.bz2
busybox-w32-3b9fc8fe2a0fee6f1128f3f73ff408555ff45df8.zip
Make unlink old files default behaviour and add a new option -k to
prevent overwritting existing files
Diffstat (limited to 'archival/tar.c')
-rw-r--r--archival/tar.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/archival/tar.c b/archival/tar.c
index bee24d84b..7516b5752 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -595,7 +595,7 @@ static llist_t *append_file_list_to_list(llist_t *list)
595#endif 595#endif
596 596
597 597
598static const char tar_options[]="ctxjT:X:C:f:Opvz"; 598static const char tar_options[]="ctxjT:X:C:f:Opvzk";
599 599
600#define CTX_CREATE 1 600#define CTX_CREATE 1
601#define CTX_TEST 2 601#define CTX_TEST 2
@@ -609,6 +609,7 @@ static const char tar_options[]="ctxjT:X:C:f:Opvz";
609#define TAR_OPT_P 512 609#define TAR_OPT_P 512
610#define TAR_OPT_VERBOSE 1024 610#define TAR_OPT_VERBOSE 1024
611#define TAR_OPT_GZIP 2048 611#define TAR_OPT_GZIP 2048
612#define TAR_OPT_KEEP_OLD 4096
612 613
613int tar_main(int argc, char **argv) 614int tar_main(int argc, char **argv)
614{ 615{
@@ -633,7 +634,7 @@ int tar_main(int argc, char **argv)
633 634
634 /* Initialise default values */ 635 /* Initialise default values */
635 tar_handle = init_handle(); 636 tar_handle = init_handle();
636 tar_handle->flags = ARCHIVE_CREATE_LEADING_DIRS | ARCHIVE_PRESERVE_DATE; 637 tar_handle->flags = ARCHIVE_CREATE_LEADING_DIRS | ARCHIVE_PRESERVE_DATE | ARCHIVE_EXTRACT_UNCONDITIONAL;
637 638
638 bb_opt_complementaly = "c~tx:t~cx:x~ct:X*"; 639 bb_opt_complementaly = "c~tx:t~cx:x~ct:X*";
639 opt = bb_getopt_ulflags(argc, argv, tar_options, 640 opt = bb_getopt_ulflags(argc, argv, tar_options,
@@ -647,29 +648,32 @@ int tar_main(int argc, char **argv)
647 bb_show_usage(); 648 bb_show_usage();
648 ctx_flag = opt & (CTX_CREATE | CTX_TEST | CTX_EXTRACT); 649 ctx_flag = opt & (CTX_CREATE | CTX_TEST | CTX_EXTRACT);
649 if(ctx_flag & CTX_TEST) { 650 if(ctx_flag & CTX_TEST) {
650 if ((tar_handle->action_header == header_list) || 651 if ((tar_handle->action_header == header_list) ||
651 (tar_handle->action_header == header_verbose_list)) { 652 (tar_handle->action_header == header_verbose_list)) {
652 tar_handle->action_header = header_verbose_list; 653 tar_handle->action_header = header_verbose_list;
653 } else { 654 } else {
654 tar_handle->action_header = header_list; 655 tar_handle->action_header = header_list;
655 } 656 }
656 } 657 }
657 if(ctx_flag & CTX_EXTRACT) { 658 if(ctx_flag & CTX_EXTRACT) {
658 if (tar_handle->action_data != data_extract_to_stdout) 659 if (tar_handle->action_data != data_extract_to_stdout)
659 tar_handle->action_data = data_extract_all; 660 tar_handle->action_data = data_extract_all;
660 } 661 }
661 if(opt & TAR_OPT_2STDOUT) { 662 if(opt & TAR_OPT_2STDOUT) {
662 /* To stdout */ 663 /* To stdout */
663 tar_handle->action_data = data_extract_to_stdout; 664 tar_handle->action_data = data_extract_to_stdout;
664 } 665 }
665 if(opt & TAR_OPT_VERBOSE) { 666 if(opt & TAR_OPT_VERBOSE) {
666 if ((tar_handle->action_header == header_list) || 667 if ((tar_handle->action_header == header_list) ||
667 (tar_handle->action_header == header_verbose_list)) 668 (tar_handle->action_header == header_verbose_list))
668 { 669 {
669 tar_handle->action_header = header_verbose_list; 670 tar_handle->action_header = header_verbose_list;
670 } else { 671 } else {
671 tar_handle->action_header = header_list; 672 tar_handle->action_header = header_list;
672 } 673 }
674 }
675 if (opt & TAR_OPT_KEEP_OLD) {
676 tar_handle->flags &= ~ARCHIVE_EXTRACT_UNCONDITIONAL;
673 } 677 }
674 678
675 if(opt & TAR_OPT_GZIP) { 679 if(opt & TAR_OPT_GZIP) {
@@ -681,7 +685,7 @@ int tar_main(int argc, char **argv)
681 } 685 }
682 if(opt & TAR_OPT_BZIP2) { 686 if(opt & TAR_OPT_BZIP2) {
683#ifdef CONFIG_FEATURE_TAR_BZIP2 687#ifdef CONFIG_FEATURE_TAR_BZIP2
684 get_header_ptr = get_header_tar_bz2; 688 get_header_ptr = get_header_tar_bz2;
685#else 689#else
686 bb_show_usage(); 690 bb_show_usage();
687#endif 691#endif