aboutsummaryrefslogtreecommitdiff
path: root/archival/tar.c
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-11-27 07:52:22 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-11-27 07:52:22 +0000
commitec87d37305e2fef720503fce62f32ec837428780 (patch)
treeb39a3352e29b62cba2f471e9f33615145dbfc52f /archival/tar.c
parent441e7efc72cdaf628d85b3c77d27df1008c43142 (diff)
downloadbusybox-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.c20
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
600int tar_main(int argc, char **argv) 604int 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