X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fhash.c;h=8438143a87823a4ff0dd6186cdda98d75263a24c;hb=559ac9667adc2becf7a2a956f00024b79056469d;hp=e3e5f6bdc81a81ab49b5f21d5f19e224834cb678;hpb=b19c419ee684dbab967f81d0dc37242d23a534e0;p=gnulib.git diff --git a/lib/hash.c b/lib/hash.c index e3e5f6bdc..8438143a8 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -1,5 +1,5 @@ /* hash - hashing table processing. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Written by Jim Meyering, 1992. This program is free software; you can redistribute it and/or modify @@ -35,9 +35,16 @@ typedef enum {false = 0, true = 1} bool; #include #include +#ifndef HAVE_DECL_FREE +"this configure-time declaration test was not run" +#endif #if !HAVE_DECL_FREE void free (); #endif + +#ifndef HAVE_DECL_MALLOC +"this configure-time declaration test was not run" +#endif #if !HAVE_DECL_MALLOC char *malloc (); #endif @@ -260,7 +267,7 @@ hash_get_first (const Hash_table *table) /* Return the user data for the entry following ENTRY, where ENTRY has been returned by a previous call to either `hash_get_first' or `hash_get_next'. - Return NULL if there is no more entries. */ + Return NULL if there are no more entries. */ void * hash_get_next (const Hash_table *table, const void *entry) @@ -277,7 +284,7 @@ hash_get_next (const Hash_table *table, const void *entry) return cursor->next->data; /* Find first entry in any subsequent bucket. */ - for (; bucket < table->bucket_limit; bucket++) + while (++bucket < table->bucket_limit) if (bucket->data) return bucket->data; @@ -716,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; @@ -847,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; @@ -936,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--;