]> sjero.net Git - wget/commitdiff
[svn] Commit hash table bugfix.
authorhniksic <devnull@localhost>
Tue, 21 Nov 2000 16:42:29 +0000 (08:42 -0800)
committerhniksic <devnull@localhost>
Tue, 21 Nov 2000 16:42:29 +0000 (08:42 -0800)
Published in <sxs8zqd9x1g.fsf@florida.arsdigita.de>.

src/ChangeLog
src/hash.c

index 642f94a885ca23fb28d96bf2640efdd515933f8d..7ec215bd7343fb6f35c6ec32cd5a0dba58dfaeae 100644 (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.
index 0749f57bdb58cf35549c310a9078438ba3a3c0df..705d8d3f137f1d550c93d3b6815c7fa12b79712a 100644 (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. */