/*
* hash.c - hashing routines mainly used for caching key details.
*
- * Jonathan McDowell <noodles@earth.li>
+ * Copyright 2000-2002 Jonathan McDowell <noodles@earth.li>
*
- * Copyright 2000-2002 Project Purple
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#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.
{
int i;
struct ll *curll = NULL;
- struct ll *nextll = NULL;
for (i = 0; i < HASHSIZE; i++) {
curll = hashtable[i];
- while (curll != NULL) {
- nextll = curll->next;
- /*
- * TODO: The problem is the object has pointers that
- * need freed too.
- */
- free(curll->object);
- free(curll);
- curll = nextll;
- }
+ /*
+ * TODO: The problem is the object has pointers that
+ * need freed too.
+ */
+ llfree(curll, (void (*)(void *)) free_statskey);
hashtable[i] = NULL;
}
elements = 0;
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;
-}