From 4a8d55ab06a04b7041c97d27a4d2eefe38de6d4b Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Thu, 2 Oct 2003 15:03:02 +0000 Subject: [PATCH] 2003-10-02 Marcus Brinkmann * 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. --- trunk/gpgme/ChangeLog | 11 +++++++++++ trunk/gpgme/edit.c | 30 ++++++++++++++++++++++++++---- trunk/gpgme/engine-backend.h | 4 ++-- trunk/gpgme/engine.c | 6 +++--- trunk/gpgme/engine.h | 4 ++-- trunk/gpgme/gpgme.h | 9 +++++++++ trunk/gpgme/rungpg.c | 4 ++-- 7 files changed, 55 insertions(+), 13 deletions(-) diff --git a/trunk/gpgme/ChangeLog b/trunk/gpgme/ChangeLog index 93e2e3c..b77492f 100644 --- a/trunk/gpgme/ChangeLog +++ b/trunk/gpgme/ChangeLog @@ -1,3 +1,14 @@ +2003-10-02 Marcus Brinkmann + + * 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 * gpgme.h (gpg_strerror_r): Change prototype to match diff --git a/trunk/gpgme/edit.c b/trunk/gpgme/edit.c index 5ea68b8..8c538f3 100644 --- a/trunk/gpgme/edit.c +++ b/trunk/gpgme/edit.c @@ -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; +} + + +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; diff --git a/trunk/gpgme/engine-backend.h b/trunk/gpgme/engine-backend.h index 0a59972..0632fb6 100644 --- a/trunk/gpgme/engine-backend.h +++ b/trunk/gpgme/engine-backend.h @@ -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, diff --git a/trunk/gpgme/engine.c b/trunk/gpgme/engine.c index 04cefc8..4c52599 100644 --- a/trunk/gpgme/engine.c +++ b/trunk/gpgme/engine.c @@ -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); } diff --git a/trunk/gpgme/engine.h b/trunk/gpgme/engine.h index 563b35b..d3a5403 100644 --- a/trunk/gpgme/engine.h +++ b/trunk/gpgme/engine.h @@ -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[], diff --git a/trunk/gpgme/gpgme.h b/trunk/gpgme/gpgme.h index 921d57e..bed0314 100644 --- a/trunk/gpgme/gpgme.h +++ b/trunk/gpgme/gpgme.h @@ -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); + /* Key management functions. */ struct _gpgme_op_keylist_result diff --git a/trunk/gpgme/rungpg.c b/trunk/gpgme/rungpg.c index d13a9c1..ba3e52c 100644 --- a/trunk/gpgme/rungpg.c +++ b/trunk/gpgme/rungpg.c @@ -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) -- 2.26.2