Author: cwittich
Date: Sat Jun 20 02:14:54 2009
New Revision: 41474
URL:
http://svn.reactos.org/svn/reactos?rev=41474&view=rev
Log:
partial dbghelp wine sync
Modified:
trunk/reactos/dll/win32/dbghelp/dbghelp_private.h
trunk/reactos/dll/win32/dbghelp/storage.c
Modified: trunk/reactos/dll/win32/dbghelp/dbghelp_private.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/dbghelp/dbghelp_…
==============================================================================
--- trunk/reactos/dll/win32/dbghelp/dbghelp_private.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/dbghelp/dbghelp_private.h [iso-8859-1] Sat Jun 20 02:14:54
2009
@@ -78,11 +78,17 @@
struct hash_table_elt* next;
};
+struct hash_table_bucket
+{
+ struct hash_table_elt* first;
+ struct hash_table_elt* last;
+};
+
struct hash_table
{
unsigned num_elts;
unsigned num_buckets;
- struct hash_table_elt** buckets;
+ struct hash_table_bucket* buckets;
struct pool* pool;
};
@@ -90,7 +96,6 @@
unsigned num_buckets);
void hash_table_destroy(struct hash_table* ht);
void hash_table_add(struct hash_table* ht, struct hash_table_elt* elt);
-void* hash_table_find(const struct hash_table* ht, const char* name);
unsigned hash_table_hash(const char* name, unsigned num_buckets);
struct hash_table_iter
Modified: trunk/reactos/dll/win32/dbghelp/storage.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/dbghelp/storage.…
==============================================================================
--- trunk/reactos/dll/win32/dbghelp/storage.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/dbghelp/storage.c [iso-8859-1] Sat Jun 20 02:14:54 2009
@@ -361,36 +361,30 @@
void hash_table_add(struct hash_table* ht, struct hash_table_elt* elt)
{
unsigned hash = hash_table_hash(elt->name,
ht->num_buckets);
- struct hash_table_elt** p;
if (!ht->buckets)
{
- ht->buckets = pool_alloc(ht->pool, ht->num_buckets * sizeof(struct
hash_table_elt*));
+ ht->buckets = pool_alloc(ht->pool, ht->num_buckets * sizeof(struct
hash_table_bucket));
assert(ht->buckets);
- memset(ht->buckets, 0, ht->num_buckets * sizeof(struct hash_table_elt*));
+ memset(ht->buckets, 0, ht->num_buckets * sizeof(struct
hash_table_bucket));
}
/* in some cases, we need to get back the symbols of same name in the order
* in which they've been inserted. So insert new elements at the end of the
list.
*/
- for (p = &ht->buckets[hash]; *p; p = &((*p)->next));
- *p = elt;
+ if (!ht->buckets[hash].first)
+ {
+ ht->buckets[hash].first = elt;
+ }
+ else
+ {
+ ht->buckets[hash].last->next = elt;
+ }
+ ht->buckets[hash].last = elt;
elt->next = NULL;
ht->num_elts++;
}
-void* hash_table_find(const struct hash_table* ht, const char* name)
-{
- unsigned hash = hash_table_hash(name, ht->num_buckets);
- struct hash_table_elt* elt;
-
- if(!ht->buckets) return NULL;
-
- for (elt = ht->buckets[hash]; elt; elt = elt->next)
- if (!strcmp(name, elt->name)) return elt;
- return NULL;
-}
-
void hash_table_iter_init(const struct hash_table* ht,
struct hash_table_iter* hti, const char* name)
{
@@ -410,10 +404,10 @@
void* hash_table_iter_up(struct hash_table_iter* hti)
{
- if(!hti->ht->buckets) return NULL;
+ if (!hti->ht->buckets) return NULL;
if (hti->element) hti->element = hti->element->next;
while (!hti->element && hti->index < hti->last)
- hti->element = hti->ht->buckets[++hti->index];
+ hti->element = hti->ht->buckets[++hti->index].first;
return hti->element;
}