X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=hash.c;h=f04258956fe71ebe8fd18b0a8c6b8c49dd81aa4d;hp=63775bb70d39583246e645ac77f6c5310c1226ee;hb=e3fcff4c503373a3f98676405783926e387f7139;hpb=0f44dc85fc1280372ffab911d701e703d803fb4b diff --git a/hash.c b/hash.c index 63775bb..f042589 100644 --- a/hash.c +++ b/hash.c @@ -97,7 +97,7 @@ int hash_insert (HASH * table, const char *key, void *data, int allow_dup) int r; for (tmp = table->table[h], last = NULL; tmp; last = tmp, tmp = tmp->next) { - r = safe_strcmp (tmp->key, key); + r = mutt_strcmp (tmp->key, key); if (r == 0) { FREE (&ptr); return (-1); @@ -120,30 +120,29 @@ void *hash_find_hash (const HASH * table, int hash, const char *key) struct hash_elem *ptr = table->table[hash]; for (; ptr; ptr = ptr->next) { - if (safe_strcmp (key, ptr->key) == 0) + if (mutt_strcmp (key, ptr->key) == 0) return (ptr->data); } return NULL; } -void hash_delete_hash (HASH * table, int hash, const char *key, - const void *data, void (*destroy) (void *)) +void hash_delete_hash (HASH * table, int hash, const char *key, const void *data, + void (*destroy) (void *)) { struct hash_elem *ptr = table->table[hash]; struct hash_elem **last = &table->table[hash]; - for (; ptr; last = &ptr->next, ptr = ptr->next) { - /* if `data' is given, look for a matching ->data member. this is - * required for the case where we have multiple entries with the same - * key - */ - if ((data == ptr->data) || (!data && safe_strcmp (ptr->key, key) == 0)) { + while (ptr) { + if ((data == ptr->data || !data) && mutt_strcmp (ptr->key, key) == 0) { *last = ptr->next; if (destroy) destroy (ptr->data); FREE (&ptr); - table->curnelem--; - return; + + ptr = *last; + } else { + last = &ptr->next; + ptr = ptr->next; } } }