X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/e02c731dfbb288c736f2cd09a9b6df0507c59ddd..1a72b8d85895fc9ffba0d8f6a9240634ce6ee8dc:/hash.c diff --git a/hash.c b/hash.c index 47ec2d8..66ae5e5 100644 --- a/hash.c +++ b/hash.c @@ -8,12 +8,12 @@ #include #include +#include #include "hash.h" -#include "keydb.h" -#include "keyid.h" +#include "keystructs.h" #include "ll.h" -#include "stats.h" +#include "mem.h" /** * hashtable - the hash table array. @@ -38,6 +38,35 @@ void inithash(void) elements = 0; } +/** + * destroyhash - Clean up the hash after use. + * + * This function destroys the hash after use, freeing any memory that was + * used during its lifetime. + */ +void destroyhash(void) +{ + int i; + struct ll *curll = NULL; + + for (i = 0; i < HASHSIZE; i++) { + curll = hashtable[i]; + /* + * TODO: The problem is the object has pointers that + * need freed too. + */ + llfree(curll, (void (*)(void *)) free_statskey); + hashtable[i] = NULL; + } + elements = 0; +} + +/** + * addtohash - Adds a key to the hash. + * @key: The key to add. + * + * Takes a key and stores it in the hash. + */ void addtohash(struct stats_key *key) { ++elements; @@ -92,42 +121,7 @@ unsigned long hashelements(void) return elements; } -struct ll *gethashtableentry(int entry) +struct ll *gethashtableentry(unsigned int entry) { return hashtable[entry]; } - -/** - * hash_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 from the keydb module except we also cache the data - * so that if we need it again we already have it available. - */ -struct ll *hash_getkeysigs(uint64_t keyid) -{ - struct stats_key *key = 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("hash_getkeysigs()"); - return NULL; - } - } - if (key->gotsigs == false) { - key->sigs = getkeysigs(key->keyid); - key->gotsigs = true; - } - - return key->sigs; -}