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.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/gpgme/op-support.c b/gpgme/op-support.c
index 6e118044..20c07385 100644
--- a/gpgme/op-support.c
+++ b/gpgme/op-support.c
@@ -62,16 +62,24 @@ _gpgme_op_data_lookup (gpgme_ctx_t ctx, ctx_op_data_id_t type, void **hook,
/* type is: 0: asynchronous operation (use global or user event loop).
1: synchronous operation (always use private event loop).
2: asynchronous private operation (use private or user
- event loop). */
+ event loop).
+ 256: Modification flag to suppress the engine reset.
+*/
gpgme_error_t
_gpgme_op_reset (gpgme_ctx_t ctx, int type)
{
gpgme_error_t err = 0;
struct gpgme_io_cbs io_cbs;
+ int no_reset = (type & 256);
+ int reuse_engine = 0;
+
+ type &= 255;
_gpgme_release_result (ctx);
- if (ctx->engine)
+ if (ctx->engine && no_reset)
+ reuse_engine = 1;
+ else if (ctx->engine)
{
/* Attempt to reset an existing engine. */
@@ -99,18 +107,20 @@ _gpgme_op_reset (gpgme_ctx_t ctx, int type)
return err;
}
- err = _gpgme_engine_set_locale (ctx->engine, LC_CTYPE, ctx->lc_ctype);
+ if (!reuse_engine)
+ {
+ err = _gpgme_engine_set_locale (ctx->engine, LC_CTYPE, ctx->lc_ctype);
#ifdef LC_MESSAGES
- if (!err)
- err = _gpgme_engine_set_locale (ctx->engine,
- LC_MESSAGES, ctx->lc_messages);
+ if (!err)
+ err = _gpgme_engine_set_locale (ctx->engine,
+ LC_MESSAGES, ctx->lc_messages);
#endif
-
- if (err)
- {
- _gpgme_engine_release (ctx->engine);
- ctx->engine = NULL;
- return err;
+ if (err)
+ {
+ _gpgme_engine_release (ctx->engine);
+ ctx->engine = NULL;
+ return err;
+ }
}
if (type == 1 || (type == 2 && !ctx->io_cbs.add))