summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/proto.h2
-rw-r--r--source3/lib/hash.c12
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;
}