[ros-diffs] [cwittich] 41474: partial dbghelp wine sync

cwittich at svn.reactos.org cwittich at svn.reactos.org
Sat Jun 20 00:14:56 CEST 2009


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_private.h?rev=41474&r1=41473&r2=41474&view=diff
==============================================================================
--- 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.c?rev=41474&r1=41473&r2=41474&view=diff
==============================================================================
--- 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;
 }



More information about the Ros-diffs mailing list