2009-11-05 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Fri, 6 Nov 2009 00:12:59 +0000 (00:12 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Fri, 6 Nov 2009 00:12:59 +0000 (00:12 +0000)
* engine-g13.c (struct engine_g13): Remove members RESULT_CB and
RESULT_CB_VALUE.
(g13_assuan_simple_command, status_handler): Don't use those anymore.
(g13_transact): Remove them from argument list, too.
* vfs-mount.c (_gpgme_vfs_mount_status_handler): New function.
(_gpgme_op_vfs_mount): Pass it to transact.

src/ChangeLog
src/engine-g13.c
src/vfs-mount.c

index 1fe09919d785c316b6328a336413e0874b069cfa..c4793b108564452793cb8c542bfd0d2e6d96e1b6 100644 (file)
@@ -1,5 +1,12 @@
 2009-11-05  Marcus Brinkmann  <marcus@g10code.de>
 
+       * engine-g13.c (struct engine_g13): Remove members RESULT_CB and
+       RESULT_CB_VALUE.
+       (g13_assuan_simple_command, status_handler): Don't use those anymore.
+       (g13_transact): Remove them from argument list, too.
+       * vfs-mount.c (_gpgme_vfs_mount_status_handler): New function.
+       (_gpgme_op_vfs_mount): Pass it to transact.
+
        * engine-assuan.c (llass_new): Update use of assuan_socket_connect.
        * engine-gpgsm.c (gpgsm_new): Update use of assuan_pipe_connect.
        * engine-g13.c (g13_new): Likewise.
index 8ecdcdfe6e9a4bd314d7ca1f3635622e791a9fbf..4bb1630a098230804b7225963ee0d9b0bdd80015 100644 (file)
@@ -69,10 +69,6 @@ struct engine_g13
 
   struct gpgme_io_cbs io_cbs;
 
-  /* Internal callbacks.  */
-  engine_assuan_result_cb_t result_cb;
-  void *result_cb_value; 
-
   /* User provided callbacks.  */
   struct {
     gpgme_assuan_data_cb_t data_cb;
@@ -398,8 +394,8 @@ g13_set_locale (void *engine, int category, const char *value)
 
 static gpgme_error_t
 g13_assuan_simple_command (assuan_context_t ctx, char *cmd,
-                            engine_status_handler_t status_fnc,
-                            void *status_fnc_value)
+                          engine_status_handler_t status_fnc,
+                          void *status_fnc_value)
 {
   gpg_error_t err;
   char *line;
@@ -480,17 +476,13 @@ status_handler (void *opaque, int fd)
                  "fd 0x%x: ERR line: %s",
                   fd, err ? gpg_strerror (err) : "ok");
          
-         /* In g13, command execution errors are not fatal, as we use
+         /* Command execution errors are not fatal, as we use
             a session based protocol.  */
-          if (g13->result_cb)
-            err = g13->result_cb (g13->result_cb_value, err);
-          else
-            err = 0;
-          if (!err)
-            {
-              _gpgme_io_close (g13->status_cb.fd);
-              return 0;
-           }
+         data->op_err = err;
+
+         /* The caller will do the rest (namely, call cancel_op,
+            which closes status_fd).  */
+         return 0;
        }
       else if (linelen >= 2
               && line[0] == 'O' && line[1] == 'K'
@@ -498,15 +490,9 @@ status_handler (void *opaque, int fd)
        {
           TRACE1 (DEBUG_CTX, "gpgme:status_handler", g13,
                  "fd 0x%x: OK line", fd);
-          if (g13->result_cb)
-            err = g13->result_cb (g13->result_cb_value, 0);
-          else
-            err = 0;
-         if (!err)
-            {
-              _gpgme_io_close (g13->status_cb.fd);
-              return 0;
-            }
+
+         _gpgme_io_close (g13->status_cb.fd);
+         return 0;
        }
       else if (linelen > 2
               && line[0] == 'D' && line[1] == ' ')
@@ -704,8 +690,6 @@ g13_reset (void *engine)
 static gpgme_error_t
 g13_transact (void *engine,
                 const char *command,
-                engine_assuan_result_cb_t result_cb,
-                void *result_cb_value,
                 gpgme_assuan_data_cb_t data_cb,
                 void *data_cb_value,
                 gpgme_assuan_inquire_cb_t inq_cb,
@@ -719,8 +703,6 @@ g13_transact (void *engine,
   if (!g13 || !command || !*command)
     return gpg_error (GPG_ERR_INV_VALUE);
 
-  g13->result_cb = result_cb;
-  g13->result_cb_value = result_cb_value;
   g13->user.data_cb = data_cb;
   g13->user.data_cb_value = data_cb_value;
   g13->user.inq_cb = inq_cb;
index 85a92adf71d0f7bca51d8de2a5cd678364764859..f5a6286c17400a8546dde63239496eea6a15d59d 100644 (file)
@@ -55,6 +55,30 @@ gpgme_op_vfs_mount_result (gpgme_ctx_t ctx)
 }
 
 
+static gpgme_error_t
+_gpgme_vfs_mount_status_handler (void *priv, const char *code, const char *args)
+{
+  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
+  gpgme_error_t err;
+  void *hook;
+  op_data_t opd;
+
+  err = _gpgme_op_data_lookup (ctx, OPDATA_VFS_MOUNT, &hook, -1, NULL);
+  opd = hook;
+  if (err)
+    return err;
+
+  if (! strcasecmp ("MOUNTPOINT", code))
+    {
+      if (opd->result.mount_dir)
+       free (opd->result.mount_dir);
+      opd->result.mount_dir = strdup (args);
+    }
+
+  return 0;
+}
+
+
 static gpgme_error_t
 vfs_start (gpgme_ctx_t ctx, int synchronous,
           const char *command,
@@ -190,7 +214,7 @@ _gpgme_op_vfs_mount (gpgme_ctx_t ctx, const char *container_file,
     }
     
   err = gpgme_op_vfs_transact (ctx, cmd, NULL, NULL, NULL, NULL,
-                              NULL, NULL, op_err);
+                              _gpgme_vfs_mount_status_handler, ctx, op_err);
   free (cmd);
 
   return err;