diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/proto.h | 2 | ||||
-rw-r--r-- | source3/lib/hash.c | 12 |
2 files changed, 11 insertions, 3 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index a5da95cd7d..9563b432fd 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -106,7 +106,7 @@ int string_hash(int hash_size, const char *key); hash_element *hash_lookup(hash_table *table, char *key); hash_element *hash_insert(hash_table *table, char *value, char *key); void hash_remove(hash_table *table, hash_element *hash_elem); -void hash_clear(hash_table *table); +BOOL hash_clear(hash_table *table); /*The following definitions come from lib/interface.c */ diff --git a/source3/lib/hash.c b/source3/lib/hash.c index ccaf65b55a..cfb34a5488 100644 --- a/source3/lib/hash.c +++ b/source3/lib/hash.c @@ -61,7 +61,7 @@ BOOL hash_table_init(hash_table *table, int num_buckets, compare_function compar table->size = 2; table->comp_func = compare_func; while (table->size < num_buckets) - table->size <<= 1; + table->size <<= 1; for (i = 0; i < NUM_PRIMES; i++) { if (primes[i] > table->size) { table->size = primes[i]; @@ -301,7 +301,7 @@ static BOOL enlarge_hash_table(hash_table *table) ************************************************************************* */ -void hash_clear(hash_table *table) +BOOL hash_clear(hash_table *table) { int i; ubi_dlList *bucket = table->buckets; @@ -315,6 +315,14 @@ void hash_clear(hash_table *table) free((char *)hash_elem); } } + table->size = 0; if(table->buckets) free((char *) table->buckets); + table->buckets = NULL; + + /* Reinitialize the hash table. */ + if(!hash_table_init(table, 0, table->comp_func)) + return False; + + return True; } |