2003-10-02 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Thu, 2 Oct 2003 15:03:02 +0000 (15:03 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Thu, 2 Oct 2003 15:03:02 +0000 (15:03 +0000)
* engine-backend.h (struct engine_ops): Add argument TYPE.
* engine.c (_gpgme_engine_op_edit): Likewise.
* engine.h: Likewise.
* rungpg.c (gpg_edit): Likewise.  Use it.
* edit.c (edit_start): Likewise.  Pass it on.
(gpgme_op_edit_start, gpgme_op_edit): Likewise.
(gpgme_op_card_edit_start, gpgme_op_card_edit): New functions.

gpgme/ChangeLog
gpgme/edit.c
gpgme/engine-backend.h
gpgme/engine.c
gpgme/engine.h
gpgme/gpgme.h
gpgme/rungpg.c

index 93e2e3c26c0a88a7c19fb4c1b3cbe2e758e053f6..b77492f3b6944674d383154e1ff7afaea5216344 100644 (file)
@@ -1,3 +1,14 @@
+2003-10-02  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-backend.h (struct engine_ops): Add argument TYPE.
+       * engine.c (_gpgme_engine_op_edit): Likewise.
+       * engine.h: Likewise.
+       * rungpg.c (gpg_edit): Likewise.  Use it.
+       * edit.c (edit_start): Likewise.  Pass it on.
+       (gpgme_op_edit_start, gpgme_op_edit): Likewise.
+       (gpgme_op_card_edit_start, gpgme_op_card_edit): New functions.
+
+
 2003-09-30  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.h (gpg_strerror_r): Change prototype to match
index 5ea68b8195d398387bd84023cb554165948b4d72..8c538f3afd4c58af9f5d5d3081857fe7517e6f63 100644 (file)
@@ -93,7 +93,7 @@ command_handler (void *priv, gpgme_status_code_t status, const char *args,
 
 
 static gpgme_error_t
-edit_start (gpgme_ctx_t ctx, int synchronous, gpgme_key_t key,
+edit_start (gpgme_ctx_t ctx, int synchronous, int type, gpgme_key_t key,
            gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
 {
   gpgme_error_t err;
@@ -122,7 +122,7 @@ edit_start (gpgme_ctx_t ctx, int synchronous, gpgme_key_t key,
 
   _gpgme_engine_set_status_handler (ctx->engine, edit_status_handler, ctx);
 
-  return _gpgme_engine_op_edit (ctx->engine, key, out, ctx);
+  return _gpgme_engine_op_edit (ctx->engine, type, key, out, ctx);
 }
 
 
@@ -130,7 +130,7 @@ gpgme_error_t
 gpgme_op_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
                     gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
 {
-  return edit_start (ctx, 0, key, fnc, fnc_value, out);
+  return edit_start (ctx, 0, 0, key, fnc, fnc_value, out);
 }
 
 
@@ -140,7 +140,29 @@ gpgme_error_t
 gpgme_op_edit (gpgme_ctx_t ctx, gpgme_key_t key,
               gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
 {
-  gpgme_error_t err = edit_start (ctx, 1, key, fnc, fnc_value, out);
+  gpgme_error_t err = edit_start (ctx, 1, 0, key, fnc, fnc_value, out);
+  if (!err)
+    err = _gpgme_wait_one (ctx);
+  return err;
+}
+
+\f
+gpgme_error_t
+gpgme_op_card_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
+                         gpgme_edit_cb_t fnc, void *fnc_value,
+                         gpgme_data_t out)
+{
+  return edit_start (ctx, 0, 1, key, fnc, fnc_value, out);
+}
+
+
+/* Edit the card for the key KEY.  Send status and command requests to
+   FNC and output of edit commands to OUT.  */
+gpgme_error_t
+gpgme_op_card_edit (gpgme_ctx_t ctx, gpgme_key_t key,
+                   gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
+{
+  gpgme_error_t err = edit_start (ctx, 1, 1, key, fnc, fnc_value, out);
   if (!err)
     err = _gpgme_wait_one (ctx);
   return err;
index 0a59972dd1465ee9b3e8cb9aa39db700b3c52deb..0632fb664a1fdf53dc4480f439a2df67effa0908 100644 (file)
@@ -49,8 +49,8 @@ struct engine_ops
   gpgme_error_t (*decrypt) (void *engine, gpgme_data_t ciph,
                            gpgme_data_t plain);
   gpgme_error_t (*delete) (void *engine, gpgme_key_t key, int allow_secret);
-  gpgme_error_t (*edit) (void *engine, gpgme_key_t key, gpgme_data_t out,
-                        gpgme_ctx_t ctx /* FIXME */);
+  gpgme_error_t (*edit) (void *engine, int type, gpgme_key_t key,
+                        gpgme_data_t out, gpgme_ctx_t ctx /* FIXME */);
   gpgme_error_t (*encrypt) (void *engine, gpgme_key_t recp[],
                            gpgme_encrypt_flags_t flags,
                            gpgme_data_t plain, gpgme_data_t ciph,
index 04cefc8c7becc5956be9227faf4758cb33b79b88..4c52599081d23d284f6ad323641653a3dc9c57ab 100644 (file)
@@ -284,8 +284,8 @@ _gpgme_engine_op_delete (engine_t engine, gpgme_key_t key,
 
 
 gpgme_error_t
-_gpgme_engine_op_edit (engine_t engine, gpgme_key_t key, gpgme_data_t out,
-                      gpgme_ctx_t ctx /* FIXME */)
+_gpgme_engine_op_edit (engine_t engine, int type, gpgme_key_t key,
+                      gpgme_data_t out, gpgme_ctx_t ctx /* FIXME */)
 {
   if (!engine)
     return gpg_error (GPG_ERR_INV_VALUE);
@@ -293,7 +293,7 @@ _gpgme_engine_op_edit (engine_t engine, gpgme_key_t key, gpgme_data_t out,
   if (!engine->ops->edit)
     return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
 
-  return (*engine->ops->edit) (engine->engine, key, out, ctx);
+  return (*engine->ops->edit) (engine->engine, type, key, out, ctx);
 }
 
 
index 563b35b009ab9fda7a8145a10fe8c86c3683ccca..d3a540369d25a8a2befc5d5ae26e14c426cb9249 100644 (file)
@@ -56,8 +56,8 @@ gpgme_error_t _gpgme_engine_op_decrypt (engine_t engine,
                                        gpgme_data_t plain);
 gpgme_error_t _gpgme_engine_op_delete (engine_t engine, gpgme_key_t key,
                                       int allow_secret);
-gpgme_error_t _gpgme_engine_op_edit (engine_t engine, gpgme_key_t key,
-                                    gpgme_data_t out,
+gpgme_error_t _gpgme_engine_op_edit (engine_t engine, int type,
+                                    gpgme_key_t key, gpgme_data_t out,
                                     gpgme_ctx_t ctx /* FIXME */);
 gpgme_error_t _gpgme_engine_op_encrypt (engine_t engine,
                                        gpgme_key_t recp[],
index 921d57e5756966f9030d05172c2ad72ac1382401..bed03145a9dfefd7d6b9efca21a95e28b7d86a8b 100644 (file)
@@ -1349,6 +1349,15 @@ gpgme_error_t gpgme_op_edit (gpgme_ctx_t ctx, gpgme_key_t key,
                             gpgme_edit_cb_t fnc, void *fnc_value,
                             gpgme_data_t out);
 
+/* Edit the card for the key KEY.  Send status and command requests to
+   FNC and output of edit commands to OUT.  */
+gpgme_error_t gpgme_op_card_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
+                                       gpgme_edit_cb_t fnc, void *fnc_value,
+                                       gpgme_data_t out);
+gpgme_error_t gpgme_op_card_edit (gpgme_ctx_t ctx, gpgme_key_t key,
+                                 gpgme_edit_cb_t fnc, void *fnc_value,
+                                 gpgme_data_t out);
+
 \f
 /* Key management functions.  */
 struct _gpgme_op_keylist_result
index d13a9c1c6b282344f487f609dcac9955f5e4c46a..ba3e52cede68aa197f47c04670992ba831a072d4 100644 (file)
@@ -1224,7 +1224,7 @@ append_args_from_signers (engine_gpg_t gpg, gpgme_ctx_t ctx /* FIXME */)
 
 
 static gpgme_error_t
-gpg_edit (void *engine, gpgme_key_t key, gpgme_data_t out,
+gpg_edit (void *engine, int type, gpgme_key_t key, gpgme_data_t out,
          gpgme_ctx_t ctx /* FIXME */)
 {
   engine_gpg_t gpg = engine;
@@ -1234,7 +1234,7 @@ gpg_edit (void *engine, gpgme_key_t key, gpgme_data_t out,
   if (!err)
     err = append_args_from_signers (gpg, ctx);
   if (!err)
-  err = add_arg (gpg, "--edit-key");
+  err = add_arg (gpg, type == 0 ? "--edit-key" : "--card-edit");
   if (!err)
     err = add_data (gpg, out, 1, 1);
   if (!err)