diff --git a/src/datastructures.c b/src/datastructures.c index 271f4c6f64770f233e6d6207f06f93d1fbce0564..d5123fd64851bfdbf1bdeab39b4f2077e599b7dd 100644 --- a/src/datastructures.c +++ b/src/datastructures.c @@ -145,12 +145,14 @@ void h_hashtable_put(HHashTable* ht, const void* key, void* value) { HHashTableEntry *hte = &ht->contents[hashval & (ht->capacity - 1)]; if (hte->key != NULL) { - do { + for(;;) { + // check each link, stay on last if not found if (hte->hashval == hashval && ht->equalFunc(key, hte->key)) goto insert_here; - if (hte->next != NULL) - hte = hte->next; - } while (hte->next != NULL); + if (hte->next == NULL) + break; + hte = hte->next; + } // Add a new link... assert (hte->next == NULL); hte->next = h_arena_malloc(ht->arena, sizeof(HHashTableEntry));