common: Rework the simple password query module.
[gnupg.git] / tools / gpgtar-list.c
index 1f917ad..cb2e700 100644 (file)
@@ -26,7 +26,8 @@
 
 #include "i18n.h"
 #include "gpgtar.h"
-#include "../common/call-gpg.h"
+#include "../common/exectool.h"
+#include "../common/ccparray.h"
 
 
 \f
@@ -64,7 +65,7 @@ parse_xoctal (const void *data, size_t length, const char *filename)
             }
           else
             {
-              log_error ("%s: invalid octal number encountered - assuming 0\n", 
+              log_error ("%s: invalid octal number encountered - assuming 0\n",
                          filename);
               value = 0;
               break;
@@ -83,7 +84,7 @@ parse_header (const void *record, const char *filename)
   tar_header_t header;
   int use_prefix;
 
-  use_prefix = (!memcmp (raw->magic, "ustar", 5) 
+  use_prefix = (!memcmp (raw->magic, "ustar", 5)
                 && (raw->magic[5] == ' ' || !raw->magic[5]));
 
 
@@ -135,7 +136,7 @@ parse_header (const void *record, const char *filename)
     n = 0;
   memcpy (header->name+n, raw->name, namelen);
   header->name[n+namelen] = 0;
-  
+
   header->mode  = parse_xoctal (raw->mode, sizeof raw->mode, filename);
   header->uid   = parse_xoctal (raw->uid, sizeof raw->uid, filename);
   header->gid   = parse_xoctal (raw->gid, sizeof raw->gid, filename);
@@ -161,7 +162,7 @@ parse_header (const void *record, const char *filename)
     header->nrecords = (header->size + RECORDSIZE-1)/RECORDSIZE;
   else
     header->nrecords = 0;
-  
+
 
   return header;
 }
@@ -281,7 +282,7 @@ gpgtar_list (const char *filename, int decrypt)
   if (filename)
     {
       if (!strcmp (filename, "-"))
-        stream = es_stdout;
+        stream = es_stdin;
       else
         stream = es_fopen (filename, "rb");
       if (!stream)
@@ -299,6 +300,10 @@ gpgtar_list (const char *filename, int decrypt)
 
   if (decrypt)
     {
+      strlist_t arg;
+      ccparray_t ccp;
+      const char **argv;
+
       cipher_stream = stream;
       stream = es_fopenmem (0, "rwb");
       if (! stream)
@@ -306,7 +311,24 @@ gpgtar_list (const char *filename, int decrypt)
           err = gpg_error_from_syserror ();
           goto leave;
         }
-      err = gpg_decrypt_stream (NULL, NULL, cipher_stream, stream);
+
+      ccparray_init (&ccp, 0);
+
+      ccparray_put (&ccp, "--decrypt");
+      for (arg = opt.gpg_arguments; arg; arg = arg->next)
+        ccparray_put (&ccp, arg->d);
+
+      ccparray_put (&ccp, NULL);
+      argv = ccparray_get (&ccp, NULL);
+      if (!argv)
+        {
+          err = gpg_error_from_syserror ();
+          goto leave;
+        }
+
+      err = gnupg_exec_tool_stream (opt.gpg_program, argv,
+                                    cipher_stream, NULL, stream, NULL, NULL);
+      xfree (argv);
       if (err)
         goto leave;