diff options
author | Ben Kibbey <[email protected]> | 2015-07-16 01:41:15 +0000 |
---|---|---|
committer | Ben Kibbey <[email protected]> | 2015-07-17 01:10:48 +0000 |
commit | 259b61f73cb40fd3cb7da21cba4b1a69bfa2da78 (patch) | |
tree | 046ca71e0b6d5ab0834407875175ed587a23bdab /src/op-support.c | |
parent | Post release updates (diff) | |
download | gpgme-bjk/custom-engine-options.tar.gz gpgme-bjk/custom-engine-options.zip |
Add per-ctx custom engine options.bjk/custom-engine-options
* src/gpgme.h.in (gpgme_ctx_set_engine_options): New prototype.
(gpgme_ctx_get_engine_options): Ditto.
* src/engine-backend.h (engine_ops): Add set_options and get_options.
* src/engine.c (gpgme_ctx_set_engine_options): New.
(gpgme_ctx_get_engine_options): Ditto.
* src/engine-gpg.c (gpg_set_options): New.
(gpg_get_options): Ditto.
* src/op-support.c (_gpgme_op_reset): Keep custom options.
* src/engine-gpg.c (_gpgme_engine_ops_gpg): Adjust for new members.
* src/engine-assuan.c (_gpgme_engine_ops_assuan): Ditto.
* src/engine-g13.c (_gpgme_engine_ops_g13): Ditto.
* src/engine-gpgconf.c (_gpgme_engine_ops_gpgconf): Ditto.
* src/engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Ditto.
* src/engine-spawn.c (_gpgme_engine_ops_spawn): Ditto.
* src/engine-uiserver.c (_gpgme_engine_ops_uiserver): Ditto.
* src/gpgme.def: Export new symbols.
* src/libgpgme.vers: Ditto.
* doc/gpgme.texi: Document these new functions.
--
Not all of gpg2's features are exposed to libgpgme and adding these
functions makes it possible to do things like specify an --s2k-count,
etc.
Diffstat (limited to 'src/op-support.c')
-rw-r--r-- | src/op-support.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/op-support.c b/src/op-support.c index 2bcb3a35..87a9b8d2 100644 --- a/src/op-support.c +++ b/src/op-support.c @@ -83,9 +83,19 @@ _gpgme_op_reset (gpgme_ctx_t ctx, int type) struct gpgme_io_cbs io_cbs; int no_reset = (type & 256); int reuse_engine = 0; + char *options = NULL; + const char *tmp = NULL; type &= 255; + err = gpgme_ctx_get_engine_options (ctx, &tmp); + if (tmp) + { + options = strdup (tmp); + if (!options) + return GPG_ERR_ENOMEM; + } + _gpgme_release_result (ctx); LOCK (ctx->lock); ctx->canceled = 0; @@ -119,8 +129,22 @@ _gpgme_op_reset (gpgme_ctx_t ctx, int type) err = _gpgme_engine_new (info, &ctx->engine); if (err) return err; + + if (options) + { + err = gpgme_ctx_set_engine_options (ctx, options); + if (err && gpg_err_code (err) != GPG_ERR_NOT_IMPLEMENTED) + { + free (options); + _gpgme_engine_release (ctx->engine); + ctx->engine = NULL; + return err; + } + } } + free (options); + if (!reuse_engine) { err = 0; |