summaryrefslogtreecommitdiff
path: root/lib/hash.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2000-05-18 11:06:39 +0000
committerJim Meyering <jim@meyering.net>2000-05-18 11:06:39 +0000
commitaa78add2de9e57cdca6b0b9cd51523c41f5e2b71 (patch)
tree64d0bb1011ba1305ba94128e6da3c44226c328a1 /lib/hash.c
parent3cf14979b7ac48716807a8ac3d66ae31787a19b1 (diff)
downloadcoreutils-aa78add2de9e57cdca6b0b9cd51523c41f5e2b71.tar.xz
(hash_rehash): Fix a nasty bug: copy the free entry list
back, too, since it may have been modified by allocate_entry. (hash_delete): Rewrite not to use both(!) the assignment operator and the comma operator in an if-expression.
Diffstat (limited to 'lib/hash.c')
-rw-r--r--lib/hash.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/hash.c b/lib/hash.c
index 1d7a59d11..02b327fc2 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -723,7 +723,7 @@ hash_find_entry (Hash_table *table, const void *entry,
if (bucket->data == NULL)
return NULL;
- /* Check if then entry is found as the bucket head. */
+ /* See if the entry is the first in the bucket. */
if ((*table->comparator) (entry, bucket->data))
{
void *data = bucket->data;
@@ -854,6 +854,7 @@ hash_rehash (Hash_table *table, unsigned candidate)
table->bucket_limit = new_table->bucket_limit;
table->n_buckets = new_table->n_buckets;
table->n_buckets_used = new_table->n_buckets_used;
+ table->free_entry_list = new_table->free_entry_list;
/* table->n_entries already holds its value. */
#if USE_OBSTACK
table->entry_stack = new_table->entry_stack;
@@ -943,7 +944,8 @@ hash_delete (Hash_table *table, const void *entry)
void *data;
struct hash_entry *bucket;
- if (data = hash_find_entry (table, entry, &bucket, true), !data)
+ data = hash_find_entry (table, entry, &bucket, true);
+ if (!data)
return NULL;
table->n_entries--;