diff options
author | Jim Meyering <jim@meyering.net> | 2000-05-18 11:06:39 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2000-05-18 11:06:39 +0000 |
commit | aa78add2de9e57cdca6b0b9cd51523c41f5e2b71 (patch) | |
tree | 64d0bb1011ba1305ba94128e6da3c44226c328a1 | |
parent | 3cf14979b7ac48716807a8ac3d66ae31787a19b1 (diff) | |
download | coreutils-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.
-rw-r--r-- | lib/hash.c | 6 |
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--; |