X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb.c;h=3fe3d34d85afe8632e9426b2e08a3ea23bdb897e;hb=5913c95f2c7abf4c3cb06e27d384d80fb4c83547;hp=3acf7112bd110a9a8ebf3ef308d32144dbcda427;hpb=f86410ff8aa00dc5c584541f387f77515a8cbd89;p=onak.git diff --git a/keydb.c b/keydb.c index 3acf711..3fe3d34 100644 --- a/keydb.c +++ b/keydb.c @@ -16,9 +16,10 @@ #include +#include "decodekey.h" +#include "hash.h" #include "keydb.h" #include "keyid.h" -#include "keyindex.h" #include "keystructs.h" #include "mem.h" #include "parsekey.h" @@ -83,6 +84,45 @@ struct ll *getkeysigs(uint64_t keyid) } #endif +/** + * cached_getkeysigs - Gets the signatures on a key. + * @keyid: The key we want the signatures for. + * + * This function gets the signatures on a key. It's the same as the + * getkeysigs function above except we use the hash module to cache the + * data so if we need it again it's already loaded. + */ +struct ll *cached_getkeysigs(uint64_t keyid) +{ + struct stats_key *key = NULL; + + if (keyid == 0) { + return NULL; + } + + key = findinhash(keyid); + if (key == NULL) { + key = malloc(sizeof(*key)); + if (key != NULL) { + key->keyid = keyid; + key->colour = 0; + key->parent = 0; + key->sigs = NULL; + key->gotsigs = false; + addtohash(key); + } else { + perror("cached_getkeysigs()"); + return NULL; + } + } + if (key->gotsigs == false) { + key->sigs = getkeysigs(key->keyid); + key->gotsigs = true; + } + + return key->sigs; +} + #ifdef NEED_GETFULLKEYID /** * getfullkeyid - Maps a 32bit key id to a 64bit one.