diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2002-11-27 07:52:22 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2002-11-27 07:52:22 +0000 |
commit | ec87d37305e2fef720503fce62f32ec837428780 (patch) | |
tree | b39a3352e29b62cba2f471e9f33615145dbfc52f /archival/tar.c | |
parent | 441e7efc72cdaf628d85b3c77d27df1008c43142 (diff) | |
download | busybox-w32-ec87d37305e2fef720503fce62f32ec837428780.tar.gz busybox-w32-ec87d37305e2fef720503fce62f32ec837428780.tar.bz2 busybox-w32-ec87d37305e2fef720503fce62f32ec837428780.zip |
Check that one and only one of the [cxt] options is given
Diffstat (limited to 'archival/tar.c')
-rw-r--r-- | archival/tar.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/archival/tar.c b/archival/tar.c index 379220291..1899ab954 100644 --- a/archival/tar.c +++ b/archival/tar.c | |||
@@ -597,6 +597,10 @@ static const llist_t *append_file_list_to_list(const char *filename, const llist | |||
597 | } | 597 | } |
598 | #endif | 598 | #endif |
599 | 599 | ||
600 | #define CTX_CREATE 1 | ||
601 | #define CTX_TEST 2 | ||
602 | #define CTX_EXTRACT 4 | ||
603 | |||
600 | int tar_main(int argc, char **argv) | 604 | int tar_main(int argc, char **argv) |
601 | { | 605 | { |
602 | char (*get_header_ptr)(archive_handle_t *) = get_header_tar; | 606 | char (*get_header_ptr)(archive_handle_t *) = get_header_tar; |
@@ -604,10 +608,7 @@ int tar_main(int argc, char **argv) | |||
604 | int opt; | 608 | int opt; |
605 | char *base_dir = NULL; | 609 | char *base_dir = NULL; |
606 | const char *tar_filename = "-"; | 610 | const char *tar_filename = "-"; |
607 | 611 | unsigned char ctx_flag = 0; | |
608 | #ifdef CONFIG_FEATURE_TAR_CREATE | ||
609 | unsigned char tar_create = FALSE; | ||
610 | #endif | ||
611 | 612 | ||
612 | if (argc < 2) { | 613 | if (argc < 2) { |
613 | show_usage(); | 614 | show_usage(); |
@@ -630,10 +631,11 @@ int tar_main(int argc, char **argv) | |||
630 | /* One and only one of these is required */ | 631 | /* One and only one of these is required */ |
631 | #ifdef CONFIG_FEATURE_TAR_CREATE | 632 | #ifdef CONFIG_FEATURE_TAR_CREATE |
632 | case 'c': | 633 | case 'c': |
633 | tar_create = TRUE; | 634 | ctx_flag |= CTX_CREATE; |
634 | break; | 635 | break; |
635 | #endif | 636 | #endif |
636 | case 't': | 637 | case 't': |
638 | ctx_flag |= CTX_TEST; | ||
637 | if ((tar_handle->action_header == header_list) || | 639 | if ((tar_handle->action_header == header_list) || |
638 | (tar_handle->action_header == header_verbose_list)) { | 640 | (tar_handle->action_header == header_verbose_list)) { |
639 | tar_handle->action_header = header_verbose_list; | 641 | tar_handle->action_header = header_verbose_list; |
@@ -642,6 +644,7 @@ int tar_main(int argc, char **argv) | |||
642 | } | 644 | } |
643 | break; | 645 | break; |
644 | case 'x': | 646 | case 'x': |
647 | ctx_flag |= CTX_EXTRACT; | ||
645 | tar_handle->action_data = data_extract_all; | 648 | tar_handle->action_data = data_extract_all; |
646 | break; | 649 | break; |
647 | 650 | ||
@@ -691,6 +694,11 @@ int tar_main(int argc, char **argv) | |||
691 | } | 694 | } |
692 | } | 695 | } |
693 | 696 | ||
697 | /* Check one and only one context option was given */ | ||
698 | if ((ctx_flag != CTX_CREATE) && (ctx_flag != CTX_TEST) && (ctx_flag != CTX_EXTRACT)) { | ||
699 | show_usage(); | ||
700 | } | ||
701 | |||
694 | /* Check if we are reading from stdin */ | 702 | /* Check if we are reading from stdin */ |
695 | if ((argv[optind]) && (*argv[optind] == '-')) { | 703 | if ((argv[optind]) && (*argv[optind] == '-')) { |
696 | /* Default is to read from stdin, so just skip to next arg */ | 704 | /* Default is to read from stdin, so just skip to next arg */ |
@@ -710,7 +718,7 @@ int tar_main(int argc, char **argv) | |||
710 | 718 | ||
711 | #ifdef CONFIG_FEATURE_TAR_CREATE | 719 | #ifdef CONFIG_FEATURE_TAR_CREATE |
712 | /* create an archive */ | 720 | /* create an archive */ |
713 | if (tar_create == TRUE) { | 721 | if (ctx_flag == CTX_CREATE) { |
714 | int verboseFlag = FALSE; | 722 | int verboseFlag = FALSE; |
715 | int gzipFlag = FALSE; | 723 | int gzipFlag = FALSE; |
716 | 724 | ||