1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

[svn] Commit hash table bugfix.

Published in <sxs8zqd9x1g.fsf@florida.arsdigita.de>.
This commit is contained in:
hniksic 2000-11-21 08:42:29 -08:00
parent 6663d70a0a
commit d6a57bc2a6
2 changed files with 11 additions and 13 deletions

View File

@ -1,3 +1,7 @@
2000-11-21 Hrvoje Niksic <hniksic@arsdigita.com>
* hash.c (hash_table_put): Don't overwrite deleted mappings.
2000-11-21 Hrvoje Niksic <hniksic@arsdigita.com>
* hash.c (find_mapping): New function.

View File

@ -329,8 +329,8 @@ grow_hash_table (struct hash_table *ht)
void
hash_table_put (struct hash_table *ht, const void *key, void *value)
{
/* Cannot use find_mapping here because we treat deleted entries
specially. */
/* Cannot use find_mapping here because we're actually looking for
an *empty* entry. */
struct mapping *mappings = ht->mappings;
int size = ht->size;
@ -349,24 +349,18 @@ hash_table_put (struct hash_table *ht, const void *key, void *value)
mp->value = value;
break;
}
else if (DELETED_ENTRY_P (mp_key))
else if (DELETED_ENTRY_P (mp_key)
|| !ht->test_function (key, mp_key))
{
/* We're replacing a deleteed entry, so ht->count gets
increased, but ht->fullness remains unchanged. */
++ht->count;
goto just_insert;
if (++location == size)
location = 0;
}
else if (ht->test_function (key, mp_key))
else /* equal to key and not deleted */
{
/* We're replacing an existing entry, so ht->count and
ht->fullness remain unchanged. */
goto just_insert;
}
else
{
if (++location == size)
location = 0;
}
}
if (ht->fullness * 4 > ht->size * 3)
/* When fullness exceeds 75% of size, regrow the table. */