diff --git a/hm.h b/hm.h index 6adc328..d96a455 100644 --- a/hm.h +++ b/hm.h @@ -264,23 +264,25 @@ bool hm_remove(HashMap *hm, const void *key) } for (Hm__Bucket *cur = head; cur != NULL; cur = cur->next) { - if (hm__keycmp(hm, key, cur->key)) { - if (cur == head) { - hm->map[idx] = cur->next; - } else { - cur->prev->next = cur->next; - } - - if (cur->next != NULL) { - cur->next->prev = cur->prev; - } - - HM_FREE(cur->key); - HM_FREE(cur->value); - HM_FREE(cur); - --hm->count; - return true; + if (!hm__keycmp(hm, key, cur->key)) { + continue; } + + if (cur == head) { + hm->map[idx] = cur->next; + } else { + cur->prev->next = cur->next; + } + + if (cur->next != NULL) { + cur->next->prev = cur->prev; + } + + HM_FREE(cur->key); + HM_FREE(cur->value); + HM_FREE(cur); + --hm->count; + return true; } return false;