aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/op-support.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpgme/op-support.c')
-rw-r--r--gpgme/op-support.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/gpgme/op-support.c b/gpgme/op-support.c
index 8a428512..4be7a018 100644
--- a/gpgme/op-support.c
+++ b/gpgme/op-support.c
@@ -68,28 +68,37 @@ gpgme_error_t
_gpgme_op_reset (gpgme_ctx_t ctx, int type)
{
gpgme_error_t err = 0;
- gpgme_engine_info_t info;
struct gpgme_io_cbs io_cbs;
- info = ctx->engine_info;
- while (info && info->protocol != ctx->protocol)
- info = info->next;
-
- if (!info)
- return gpg_error (GPG_ERR_UNSUPPORTED_PROTOCOL);
-
_gpgme_release_result (ctx);
if (ctx->engine)
{
- _gpgme_engine_release (ctx->engine);
- ctx->engine = NULL;
+ /* Attempt to reset an existing engine. */
+
+ err = _gpgme_engine_reset (ctx->engine);
+ if (gpg_err_code (err) == GPG_ERR_NOT_IMPLEMENTED)
+ {
+ _gpgme_engine_release (ctx->engine);
+ ctx->engine = NULL;
+ }
}
- /* Create an engine object. */
- err = _gpgme_engine_new (info, &ctx->engine);
- if (err)
- return err;
+ if (!ctx->engine)
+ {
+ gpgme_engine_info_t info;
+ info = ctx->engine_info;
+ while (info && info->protocol != ctx->protocol)
+ info = info->next;
+
+ if (!info)
+ return gpg_error (GPG_ERR_UNSUPPORTED_PROTOCOL);
+
+ /* Create an engine object. */
+ err = _gpgme_engine_new (info, &ctx->engine);
+ if (err)
+ return err;
+ }
err = _gpgme_engine_set_locale (ctx->engine, LC_CTYPE, ctx->lc_ctype);
if (!err)