tools/gpgtar: Rework argument parsing.
authorJustus Winter <justus@g10code.com>
Thu, 26 Nov 2015 10:46:35 +0000 (11:46 +0100)
committerJustus Winter <justus@g10code.com>
Thu, 26 Nov 2015 10:46:35 +0000 (11:46 +0100)
* tools/gpgtar.c (main): Move argument parsing into its own function.

Signed-off-by: Justus Winter <justus@g10code.com>
tools/gpgtar.c

index 991fbed..04d23b5 100644 (file)
@@ -160,65 +160,46 @@ set_cmd (enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd)
 ASSUAN_SYSTEM_NPTH_IMPL;
 
 \f
-/* gpgtar main. */
-int
-main (int argc, char **argv)
-{
-  gpg_error_t err;
-  ARGPARSE_ARGS pargs;
-  const char *fname;
-  int no_more_options = 0;
-  enum cmd_and_opt_values cmd = 0;
-  int skip_crypto = 0;
-  const char *files_from = NULL;
-  int null_names = 0;
+/* Global flags.  */
+enum cmd_and_opt_values cmd = 0;
+int skip_crypto = 0;
+const char *files_from = NULL;
+int null_names = 0;
 
-  assert (sizeof (struct ustar_raw_header) == 512);
 
-  gnupg_reopen_std (GPGTAR_NAME);
-  set_strusage (my_strusage);
-  log_set_prefix (GPGTAR_NAME, 1);
-
-  /* Make sure that our subsystems are ready.  */
-  i18n_init();
-  init_common_subsystems (&argc, &argv);
-  npth_init ();
-  assuan_set_assuan_log_prefix (log_get_prefix (NULL));
-  assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
-  assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH);
-  assuan_sock_init ();
+/* Command line parsing.  */
+static void
+parse_arguments (ARGPARSE_ARGS *pargs)
+{
+  int no_more_options = 0;
 
-  /* Parse the command line. */
-  pargs.argc  = &argc;
-  pargs.argv  = &argv;
-  pargs.flags = ARGPARSE_FLAG_KEEP;
-  while (!no_more_options && optfile_parse (NULL, NULL, NULL, &pargs, opts))
+  while (!no_more_options && optfile_parse (NULL, NULL, NULL, pargs, opts))
     {
-      switch (pargs.r_opt)
+      switch (pargs->r_opt)
         {
-        case oOutput:    opt.outfile = pargs.r.ret_str; break;
-        case oDirectory: opt.directory = pargs.r.ret_str; break;
-        case oSetFilename: opt.filename = pargs.r.ret_str; break;
+        case oOutput:    opt.outfile = pargs->r.ret_str; break;
+        case oDirectory: opt.directory = pargs->r.ret_str; break;
+        case oSetFilename: opt.filename = pargs->r.ret_str; break;
        case oQuiet:     opt.quiet = 1; break;
         case oVerbose:   opt.verbose++; break;
         case oNoVerbose: opt.verbose = 0; break;
-        case oFilesFrom: files_from = pargs.r.ret_str; break;
+        case oFilesFrom: files_from = pargs->r.ret_str; break;
         case oNull: null_names = 1; break;
 
        case aList:
         case aDecrypt:
         case aEncrypt:
         case aSign:
-          set_cmd (&cmd, pargs.r_opt);
+          set_cmd (&cmd, pargs->r_opt);
          break;
 
         case oRecipient:
-          add_to_strlist (&opt.recipients, pargs.r.ret_str);
+          add_to_strlist (&opt.recipients, pargs->r.ret_str);
           break;
 
         case oUser:
           log_info ("note: ignoring option --user\n");
-          opt.user = pargs.r.ret_str;
+          opt.user = pargs->r.ret_str;
           break;
 
         case oSymmetric:
@@ -228,7 +209,7 @@ main (int argc, char **argv)
           break;
 
         case oGpgProgram:
-          opt.gpg_program = pargs.r.ret_str;
+          opt.gpg_program = pargs->r.ret_str;
           break;
 
         case oSkipCrypto:
@@ -238,9 +219,40 @@ main (int argc, char **argv)
         case oOpenPGP: /* Dummy option for now.  */ break;
         case oCMS:     /* Dummy option for now.  */ break;
 
-        default: pargs.err = 2; break;
+        default: pargs->err = 2; break;
        }
     }
+}
+
+\f
+/* gpgtar main. */
+int
+main (int argc, char **argv)
+{
+  gpg_error_t err;
+  const char *fname;
+  ARGPARSE_ARGS pargs;
+
+  assert (sizeof (struct ustar_raw_header) == 512);
+
+  gnupg_reopen_std (GPGTAR_NAME);
+  set_strusage (my_strusage);
+  log_set_prefix (GPGTAR_NAME, 1);
+
+  /* Make sure that our subsystems are ready.  */
+  i18n_init();
+  init_common_subsystems (&argc, &argv);
+  npth_init ();
+  assuan_set_assuan_log_prefix (log_get_prefix (NULL));
+  assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
+  assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH);
+  assuan_sock_init ();
+
+  /* Parse the command line. */
+  pargs.argc  = &argc;
+  pargs.argv  = &argv;
+  pargs.flags = ARGPARSE_FLAG_KEEP;
+  parse_arguments (&pargs);
 
   if ((files_from && !null_names) || (!files_from && null_names))
     log_error ("--files-from and --null may only be used in conjunction\n");