Fix some bugs in hash table implementation.

This commit is contained in:
Vreixo Formoso 2008-01-12 02:42:27 +01:00
parent b4d76f7925
commit 4b3a86185f

View File

@ -178,7 +178,7 @@ int iso_htable_remove(IsoHTable *table, void *key, hfree_data_t free_data)
struct iso_hnode *node, *prev; struct iso_hnode *node, *prev;
unsigned int hash; unsigned int hash;
if (table == NULL || key == NULL || free_data == NULL) { if (table == NULL || key == NULL) {
return ISO_NULL_POINTER; return ISO_NULL_POINTER;
} }
@ -188,7 +188,7 @@ int iso_htable_remove(IsoHTable *table, void *key, hfree_data_t free_data)
while (node) { while (node) {
if (!table->compare(key, node->key)) { if (!table->compare(key, node->key)) {
if (free_data) if (free_data)
free_data(key, node->data); free_data(node->key, node->data);
if (prev) { if (prev) {
prev->next = node->next; prev->next = node->next;
} else { } else {
@ -232,7 +232,7 @@ void iso_htable_destroy(IsoHTable *table, hfree_data_t free_data)
size_t i; size_t i;
struct iso_hnode *node, *tmp; struct iso_hnode *node, *tmp;
if (table == NULL || free_data == NULL) { if (table == NULL) {
return; return;
} }
@ -243,6 +243,7 @@ void iso_htable_destroy(IsoHTable *table, hfree_data_t free_data)
if (free_data) if (free_data)
free_data(node->key, node->data); free_data(node->key, node->data);
free(node); free(node);
node = tmp;
} }
} }
free(table->table); free(table->table);