X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_hash.c;h=7b96c51cd2f8e4fdfe9e68c500ed316013269f7c;hb=ca90b151a05f17ccc1c3215ff24dc5d7b9198ff4;hp=5abf9fd16f6a5812ccc5f81738746bc7a811ac19;hpb=399b9bcaf2199202853e55acb58b7a5b3632aeec;p=platform%2Fupstream%2Fisl.git diff --git a/isl_hash.c b/isl_hash.c index 5abf9fd..7b96c51 100644 --- a/isl_hash.c +++ b/isl_hash.c @@ -1,15 +1,16 @@ /* * Copyright 2008-2009 Katholieke Universiteit Leuven * - * Use of this software is governed by the GNU LGPLv2.1 license + * Use of this software is governed by the MIT license * * Written by Sven Verdoolaege, K.U.Leuven, Departement * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium */ #include -#include "isl_hash.h" -#include "isl_ctx.h" +#include +#include +#include uint32_t isl_hash_string(uint32_t hash, const char *s) { @@ -63,6 +64,7 @@ int isl_hash_table_init(struct isl_ctx *ctx, struct isl_hash_table *table, static int grow_table(struct isl_ctx *ctx, struct isl_hash_table *table, int (*eq)(const void *entry, const void *val)) { + int n; size_t old_size, size; struct isl_hash_table_entry *entries; uint32_t h; @@ -77,6 +79,8 @@ static int grow_table(struct isl_ctx *ctx, struct isl_hash_table *table, return -1; } + n = table->n; + table->n = 0; table->bits++; for (h = 0; h < old_size; ++h) { @@ -91,6 +95,7 @@ static int grow_table(struct isl_ctx *ctx, struct isl_hash_table *table, table->bits--; free(table->entries); table->entries = entries; + table->n = n; return -1; } @@ -163,7 +168,7 @@ struct isl_hash_table_entry *isl_hash_table_find(struct isl_ctx *ctx, int isl_hash_table_foreach(struct isl_ctx *ctx, struct isl_hash_table *table, - int (*fn)(void *entry, void *user), void *user) + int (*fn)(void **entry, void *user), void *user) { size_t size; uint32_t h; @@ -171,7 +176,7 @@ int isl_hash_table_foreach(struct isl_ctx *ctx, size = 1 << table->bits; for (h = 0; h < size; ++ h) if (table->entries[h].data && - fn(table->entries[h].data, user) < 0) + fn(&table->entries[h].data, user) < 0) return -1; return 0;