#ifndef PAKFIRE_KEY_H
#define PAKFIRE_KEY_H
-#include <gpgme.h>
#include <time.h>
struct pakfire_key;
struct pakfire_key** pakfire_key_list(Pakfire pakfire);
-struct pakfire_key* pakfire_key_create(Pakfire pakfire, gpgme_key_t gpgkey);
struct pakfire_key* pakfire_key_ref(struct pakfire_key* key);
void pakfire_key_unref(struct pakfire_key* key);
char* pakfire_key_dump(struct pakfire_key* key);
+#ifdef PAKFIRE_PRIVATE
+
+#include <gpgme.h>
+
+int pakfire_key_create(struct pakfire_key** key, Pakfire pakfire, gpgme_key_t gpgkey);
+
+#endif
+
#endif /* PAKFIRE_KEY_H */
if (count == 0)
return NULL;
+ struct pakfire_key* key = NULL;
+
gpgme_ctx_t gpgctx = pakfire_get_gpgctx(pakfire);
struct pakfire_key** first = calloc(count + 1, sizeof(struct pakfire_key*));
if (error)
break;
+ pakfire_key_create(&key, pakfire, gpgkey);
+
// Add key to the list
- *list++ = pakfire_key_create(pakfire, gpgkey);
+ *list++ = key;
gpgme_key_release(gpgkey);
}
return first;
}
-PAKFIRE_EXPORT struct pakfire_key* pakfire_key_create(Pakfire pakfire, gpgme_key_t gpgkey) {
- struct pakfire_key* key = calloc(1, sizeof(*key));
+int pakfire_key_create(struct pakfire_key** key, Pakfire pakfire, gpgme_key_t gpgkey) {
+ struct pakfire_key* k = calloc(1, sizeof(*k));
+ if (!k)
+ return 1;
- if (key) {
- key->nrefs = 1;
- key->pakfire = pakfire_ref(pakfire);
+ // Initialize pakfire and reference counter
+ k->pakfire = pakfire_ref(pakfire);
+ k->nrefs = 1;
- key->gpgkey = gpgkey;
- gpgme_key_ref(key->gpgkey);
- }
+ // Keep a reference to this key
+ gpgme_key_ref(gpgkey);
+ k->gpgkey = gpgkey;
- return key;
+ *key = k;
+ return 0;
}
static void pakfire_key_free(struct pakfire_key* key) {
gpgme_error_t error = gpgme_get_key(gpgctx, fingerprint, &gpgkey, 0);
switch (gpg_error(error)) {
case GPG_ERR_NO_ERROR:
- key = pakfire_key_create(pakfire, gpgkey);
+ pakfire_key_create(&key, pakfire, gpgkey);
gpgme_key_unref(gpgkey);
break;