diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2003-11-18 20:23:04 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2003-11-18 20:23:04 +0000 |
commit | 3b9fc8fe2a0fee6f1128f3f73ff408555ff45df8 (patch) | |
tree | 073b6ac0a1b25a951e6e1fb5cfbc18888d3c001a /archival/tar.c | |
parent | de3ea9f049167fdd6813f53af23096b6110afe05 (diff) | |
download | busybox-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.c | 42 |
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 | ||
598 | static const char tar_options[]="ctxjT:X:C:f:Opvz"; | 598 | static 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 | ||
613 | int tar_main(int argc, char **argv) | 614 | int 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 |