X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=hash.c;h=cb2cf2e4c318dbdce5c03f22adb1b6b8799ac395;hp=77fc7e812c0cbbc9e5471dcfa63cf7f13271caf2;hb=1601b25fd310dd65a6b6d1b49f2e16f55560ac9d;hpb=96d53ff49c308769efbf708e1e65819077cb7af6 diff --git a/hash.c b/hash.c index 77fc7e8..cb2cf2e 100644 --- a/hash.c +++ b/hash.c @@ -40,13 +40,13 @@ int hash_string (const unsigned char *s, int n) HASH *hash_create (int nelem) { - HASH *table = safe_malloc (sizeof (HASH)); + HASH *table = mem_malloc (sizeof (HASH)); if (nelem == 0) nelem = 2; table->nelem = nelem; table->curnelem = 0; - table->table = safe_calloc (nelem, sizeof (struct hash_elem *)); + table->table = mem_calloc (nelem, sizeof (struct hash_elem *)); return table; } @@ -63,11 +63,11 @@ HASH *hash_resize (HASH * ptr, int nelem) tmp = elem; elem = elem->next; hash_insert (table, tmp->key, tmp->data, 1); - FREE (&tmp); + mem_free (&tmp); } } - FREE (&ptr->table); - FREE (&ptr); + mem_free (&ptr->table); + mem_free (&ptr); return table; } @@ -82,7 +82,7 @@ int hash_insert (HASH * table, const char *key, void *data, int allow_dup) struct hash_elem *ptr; int h; - ptr = (struct hash_elem *) safe_malloc (sizeof (struct hash_elem)); + ptr = (struct hash_elem *) mem_malloc (sizeof (struct hash_elem)); h = hash_string ((unsigned char *) key, table->nelem); ptr->key = key; ptr->data = data; @@ -97,9 +97,9 @@ 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 = mutt_strcmp (tmp->key, key); + r = str_cmp (tmp->key, key); if (r == 0) { - FREE (&ptr); + mem_free (&ptr); return (-1); } if (r > 0) @@ -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 (mutt_strcmp (key, ptr->key) == 0) + if (str_cmp (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 && mutt_strcmp (ptr->key, key) == 0)) { + while (ptr) { + if ((data == ptr->data || !data) && str_cmp (ptr->key, key) == 0) { *last = ptr->next; if (destroy) destroy (ptr->data); - FREE (&ptr); - table->curnelem--; - return; + mem_free (&ptr); + + ptr = *last; + } else { + last = &ptr->next; + ptr = ptr->next; } } } @@ -163,9 +162,9 @@ void hash_destroy (HASH ** ptr, void (*destroy) (void *)) elem = elem->next; if (destroy) destroy (tmp->data); - FREE (&tmp); + mem_free (&tmp); } } - FREE (&pptr->table); - FREE (ptr); + mem_free (&pptr->table); + mem_free (ptr); }