From fef88bd179baadb4e6e55bfc0569320b476955e3 Mon Sep 17 00:00:00 2001 From: hniksic Date: Fri, 7 Nov 2003 16:52:23 -0800 Subject: [PATCH] [svn] Mark entries as deleted with the correct marker. --- src/ChangeLog | 2 ++ src/hash.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8c422f9b..85b6c5cb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -4,6 +4,8 @@ (grow_hash_table): Extract ht->hash_function outside the loop. (hash_table_remove): Ditto. (hash_table_clear): Fill entries with 0xff to clear them. + (hash_table_remove): Mark entries as deleted with the correct + marker. 2003-11-08 Hrvoje Niksic diff --git a/src/hash.c b/src/hash.c index b7b73fdc..2c8d1351 100644 --- a/src/hash.c +++ b/src/hash.c @@ -161,7 +161,9 @@ struct hash_table { /* We use all-bit-set marker to mean that a mapping is empty. It is (hopefully) illegal as a pointer, and it allows the users to use NULL (as well as any non-negative integer) as key. */ + #define NON_EMPTY(mp) (mp->key != (void *)~(unsigned long)0) +#define MARK_AS_EMPTY(mp) (mp->key = (void *)~(unsigned long)0) /* "Next" mapping is the mapping after MP, but wrapping back to MAPPINGS when MP would reach MAPPINGS+SIZE. */ @@ -438,7 +440,7 @@ hash_table_remove (struct hash_table *ht, const void *key) struct mapping *mappings = ht->mappings; hashfun_t hasher = ht->hash_function; - mp->key = NULL; + MARK_AS_EMPTY (mp); --ht->count; /* Rehash all the entries following MP. The alternative @@ -461,7 +463,7 @@ hash_table_remove (struct hash_table *ht, const void *key) goto next_rehash; *mp_new = *mp; - mp->key = NULL; + MARK_AS_EMPTY (mp); next_rehash: ; -- 2.39.2