diff options
author | Andre Heinecke <[email protected]> | 2017-03-21 08:38:11 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-03-21 08:50:23 +0000 |
commit | 35023f313622fb1b34108dd934e84831c58b81aa (patch) | |
tree | 8edded69231ac5addea605570ac237b1ae358313 /src/keylist.c | |
parent | core,cpp: New key flag 'is_de_vs'. (diff) | |
download | gpgme-35023f313622fb1b34108dd934e84831c58b81aa.tar.gz gpgme-35023f313622fb1b34108dd934e84831c58b81aa.zip |
core: New public API gpgme_op_keylist_from_data_start.
* src/gpgme.h.in: New API gpgme_op_keylist_from_data_start.
* src/libgpgme.vers, src/gpgme.def: Add it.
* src/keylist.c (gpgme_op_keylist_from_data_start): New.
* src/engine-backend.h (engine_ops): Add field 'keylist_data'. Change
all engines to pass NULL for it.
* src/engine.c (_gpgme_engine_op_keylist_data): New.
* src/engine-gpg.c (gpg_keylist_data): New.
(_gpgme_engine_ops_gpg): Register gpg_keylist_data.
* tests/run-keylist.c (main): New option --from-file.
--
Co-authored-by: Werner Koch <[email protected]>
GnuPG-bug-id: 2819
Diffstat (limited to 'src/keylist.c')
-rw-r--r-- | src/keylist.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/keylist.c b/src/keylist.c index de9bbb2f..c88a7ca5 100644 --- a/src/keylist.c +++ b/src/keylist.c @@ -1142,6 +1142,42 @@ gpgme_op_keylist_ext_start (gpgme_ctx_t ctx, const char *pattern[], } +/* Start a keylist operation within CTX to show keys contained + * in DATA. */ +gpgme_error_t +gpgme_op_keylist_from_data_start (gpgme_ctx_t ctx, gpgme_data_t data, + int reserved) +{ + gpgme_error_t err; + void *hook; + op_data_t opd; + + TRACE_BEG (DEBUG_CTX, "gpgme_op_keylist_from_data_start", ctx); + + if (!ctx || !data || reserved) + return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE)); + + err = _gpgme_op_reset (ctx, 2); + if (err) + return TRACE_ERR (err); + + err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook, + sizeof (*opd), release_op_data); + opd = hook; + if (err) + return TRACE_ERR (err); + + _gpgme_engine_set_status_handler (ctx->engine, keylist_status_handler, ctx); + err = _gpgme_engine_set_colon_line_handler (ctx->engine, + keylist_colon_handler, ctx); + if (err) + return TRACE_ERR (err); + + err = _gpgme_engine_op_keylist_data (ctx->engine, data); + return TRACE_ERR (err); +} + + /* Return the next key from the keylist in R_KEY. */ gpgme_error_t gpgme_op_keylist_next (gpgme_ctx_t ctx, gpgme_key_t *r_key) |