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 | |
| 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
| -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 |
