tools/gpgtar: Handle '--directory' argument.
authorJustus Winter <justus@g10code.com>
Wed, 25 Nov 2015 17:29:22 +0000 (18:29 +0100)
committerJustus Winter <justus@g10code.com>
Wed, 25 Nov 2015 17:29:22 +0000 (18:29 +0100)
* tools/gpgtar-extract.c (gpgtar_extract): Only generate a directory
name if none is given via arguments.
* tools/gpgtar.c (enum cmd_and_opt_values): New constant.
(opts): Add argument.
(main): Parse argument.
* tools/gpgtar.h (opt): New field 'directory'.

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

index 92346b0..fa2f362 100644 (file)
@@ -312,31 +312,36 @@ gpgtar_extract (const char *filename, int decrypt)
         goto leave;
     }
 
-  if (filename)
-    {
-      dirprefix = strrchr (filename, '/');
-      if (dirprefix)
-        dirprefix++;
-      else
-        dirprefix = filename;
-    }
-  else if (opt.filename)
+  if (opt.directory)
+    dirname = xtrystrdup (opt.directory);
+  else
     {
-      dirprefix = strrchr (opt.filename, '/');
-      if (dirprefix)
-        dirprefix++;
-      else
-        dirprefix = opt.filename;
-    }
+      if (filename)
+        {
+          dirprefix = strrchr (filename, '/');
+          if (dirprefix)
+            dirprefix++;
+          else
+            dirprefix = filename;
+        }
+      else if (opt.filename)
+        {
+          dirprefix = strrchr (opt.filename, '/');
+          if (dirprefix)
+            dirprefix++;
+          else
+            dirprefix = opt.filename;
+        }
 
-  if (!dirprefix || !*dirprefix)
-    dirprefix = "GPGARCH";
+      if (!dirprefix || !*dirprefix)
+        dirprefix = "GPGARCH";
 
-  dirname = create_directory (dirprefix);
-  if (!dirname)
-    {
-      err = gpg_error (GPG_ERR_GENERAL);
-      goto leave;
+      dirname = create_directory (dirprefix);
+      if (!dirname)
+        {
+          err = gpg_error (GPG_ERR_GENERAL);
+          goto leave;
+        }
     }
 
   if (opt.verbose)
index c4bf855..991fbed 100644 (file)
@@ -58,6 +58,7 @@ enum cmd_and_opt_values
     oRecipient = 'r',
     oUser       = 'u',
     oOutput    = 'o',
+    oDirectory  = 'C',
     oQuiet      = 'q',
     oVerbose   = 'v',
     oFilesFrom  = 'T',
@@ -89,6 +90,8 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_s (oUser, "local-user",
                 N_("|USER-ID|use USER-ID to sign or decrypt")),
   ARGPARSE_s_s (oOutput, "output", N_("|FILE|write output to FILE")),
+  ARGPARSE_s_s (oDirectory, "directory",
+                N_("|DIRECTORY|extract files into DIRECTORY")),
   ARGPARSE_s_n (oVerbose, "verbose", N_("verbose")),
   ARGPARSE_s_n (oQuiet,        "quiet",  N_("be somewhat more quiet")),
   ARGPARSE_s_s (oGpgProgram, "gpg", "@"),
@@ -194,6 +197,7 @@ main (int argc, char **argv)
       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 oQuiet:     opt.quiet = 1; break;
         case oVerbose:   opt.verbose++; break;
index 98fd51c..66a8ae1 100644 (file)
@@ -35,6 +35,7 @@ struct
   const char *user;
   int symmetric;
   const char *filename;
+  const char *directory;
 } opt;