cpp: Wrap keylist_from_data

* lang/cpp/data.h, lang/cpp/data.cpp (GpgME::Data::toKeys): New.

--
Doing this in data instead of Context is a bit more idiomatic. But
this could also be added to Context.
This commit is contained in:
Andre Heinecke 2017-03-22 16:38:35 +01:00
parent 121873b821
commit 8ddb42ada4
No known key found for this signature in database
GPG Key ID: 2978E9D40CBABA5C
3 changed files with 30 additions and 0 deletions

1
NEWS
View File

@ -26,6 +26,7 @@ Noteworthy changes in version 1.8.1 (unreleased)
cpp: GpgGenCardKeyInteractor NEW. cpp: GpgGenCardKeyInteractor NEW.
cpp: Subkey::keyGrip NEW. cpp: Subkey::keyGrip NEW.
cpp: Subkey::isDeVs NEW. cpp: Subkey::isDeVs NEW.
cpp: Data::toKeys NEW.
qt: CryptoConfig::stringValueList() NEW. qt: CryptoConfig::stringValueList() NEW.
py: Context.__init__ EXTENDED: New keyword arg home_dir. py: Context.__init__ EXTENDED: New keyword arg home_dir.
py: Context.home_dir NEW. py: Context.home_dir NEW.

View File

@ -25,6 +25,7 @@
#endif #endif
#include "data_p.h" #include "data_p.h"
#include "context_p.h"
#include <error.h> #include <error.h>
#include <interfaces/dataprovider.h> #include <interfaces/dataprovider.h>
@ -230,3 +231,26 @@ off_t GpgME::Data::seek(off_t offset, int whence)
{ {
return gpgme_data_seek(d->data, offset, whence); return gpgme_data_seek(d->data, offset, whence);
} }
std::vector<GpgME::Key> GpgME::Data::toKeys(Protocol proto) const
{
std::vector<GpgME::Key> ret;
if (isNull()) {
return ret;
}
auto ctx = GpgME::Context::createForProtocol(proto);
if (!ctx) {
return ret;
}
if (gpgme_op_keylist_from_data_start (ctx->impl()->ctx, d->data, 0)) {
return ret;
}
gpgme_key_t key;
while (!gpgme_op_keylist_next (ctx->impl()->ctx, &key)) {
ret.push_back(GpgME::Key(key, false));
}
delete ctx;
return ret;
}

View File

@ -24,6 +24,7 @@
#define __GPGMEPP_DATA_H__ #define __GPGMEPP_DATA_H__
#include "global.h" #include "global.h"
#include "key.h"
#include <sys/types.h> // for size_t, off_t #include <sys/types.h> // for size_t, off_t
#include <cstdio> // FILE #include <cstdio> // FILE
@ -109,6 +110,10 @@ public:
ssize_t write(const void *buffer, size_t length); ssize_t write(const void *buffer, size_t length);
off_t seek(off_t offset, int whence); off_t seek(off_t offset, int whence);
/** Try to parse the data to a key object using the
* Protocol proto. Returns an empty list on error.*/
std::vector<Key> toKeys(const Protocol proto = Protocol::OpenPGP) const;
class Private; class Private;
Private *impl() Private *impl()
{ {