- struct hashtable *h;
- unsigned int i, size = 1u;
- /* Check requested hashtable isn't too large */
- if (minsize > (1u << 31)) return NULL;
- /* Enforce size as power of 2 */
- while (size < minsize) size <<= 1;
- h = (struct hashtable *)malloc(sizeof(struct hashtable));
- if (NULL == h) return NULL; /*oom*/
- h->table = (struct entry **)malloc(sizeof(struct entry*) * size);
- if (NULL == h->table) { free(h); return NULL; } /*oom*/
-
- for (i=0; i < size; i++) { h->table[i] = NULL; }
- h->tablelength = size;
- h->entrycount = 0;
- h->hashfn = hashf;
- h->eqfn = eqf;
- h->loadlimit = (unsigned int) ((float)size * maxloadfactor);
- return h;
+ struct hashtable *h;
+ unsigned int i, size = 1u;
+
+ /* Check requested hashtable isn't too large */
+ if (minsize > (1u << 31))
+ return NULL;
+
+ /* Enforce size as power of 2 */
+ while (size < minsize)
+ size <<= 1;
+
+ h = (struct hashtable *)malloc(sizeof(struct hashtable));
+
+ if (h == NULL)
+ return NULL;
+
+ h->table = (struct entry **)malloc(sizeof(struct entry*) * size);
+
+ if (h->table == NULL)
+ {
+ free(h);
+
+ return NULL;
+ }
+
+ for (i = 0; i < size; i++)
+ h->table[i] = NULL;
+
+ h->tablelength = size;
+ h->entrycount = 0;
+ h->hashfn = hashf;
+ h->eqfn = eqf;
+ h->loadlimit = (unsigned int) ((float)size * maxloadfactor);
+ h->freekfn = freekfn;
+ h->freevfn = freevfn;
+
+ return h;
+}
+
+struct hashtable *
+create_hashtable(unsigned int (*hashf) (void*),
+ int (*eqf) (void*, void*),
+ void (*freekfn) (void*),
+ void (*freevfn) (void*))
+{
+ return create_hashtable_ext(16, 0.75, hashf, eqf, freekfn, freevfn);