dbghelp: Use CONTAINING_RECORD instead of reimplementing it.

Michael Stefaniuc mstefani at redhat.de
Tue Mar 8 04:44:26 CST 2016


Signed-off-by: Michael Stefaniuc <mstefani at redhat.de>
---
There is nothing special about ENTRY / entry, not part of a self
consistent API or so. Actually GET_ENTRY is the only thing matching
entry in dbghelp_private.h.


 dlls/dbghelp/dbghelp_private.h |  3 ---
 dlls/dbghelp/elf_module.c      |  2 +-
 dlls/dbghelp/macho_module.c    |  2 +-
 dlls/dbghelp/msc.c             | 10 +++++-----
 dlls/dbghelp/pe_module.c       |  2 +-
 dlls/dbghelp/symbol.c          |  8 ++++----
 dlls/dbghelp/type.c            |  2 +-
 7 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index 98bd363..53d1377 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -112,9 +112,6 @@ void     hash_table_iter_init(const struct hash_table* ht,
                               struct hash_table_iter* hti, const char* name) DECLSPEC_HIDDEN;
 void*    hash_table_iter_up(struct hash_table_iter* hti) DECLSPEC_HIDDEN;
 
-#define GET_ENTRY(__i, __t, __f) \
-    ((__t*)((char*)(__i) - FIELD_OFFSET(__t,__f)))
-
 
 extern unsigned dbghelp_options DECLSPEC_HIDDEN;
 /* some more Wine extensions */
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index b176143..6428955 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -659,7 +659,7 @@ static void elf_finish_stabs_info(struct module* module, const struct hash_table
     hash_table_iter_init(&module->ht_symbols, &hti, NULL);
     while ((ptr = hash_table_iter_up(&hti)))
     {
-        sym = GET_ENTRY(ptr, struct symt_ht, hash_elt);
+        sym = CONTAINING_RECORD(ptr, struct symt_ht, hash_elt);
         switch (sym->symt.tag)
         {
         case SymTagFunction:
diff --git a/dlls/dbghelp/macho_module.c b/dlls/dbghelp/macho_module.c
index 1f5d446..01fa300 100644
--- a/dlls/dbghelp/macho_module.c
+++ b/dlls/dbghelp/macho_module.c
@@ -920,7 +920,7 @@ static void macho_finish_stabs(struct module* module, struct hash_table* ht_symt
         hash_table_iter_init(&module->ht_symbols, &hti_modules, ste->ht_elt.name);
         while ((ptr = hash_table_iter_up(&hti_modules)))
         {
-            sym = GET_ENTRY(ptr, struct symt_ht, hash_elt);
+            sym = CONTAINING_RECORD(ptr, struct symt_ht, hash_elt);
 
             if (strcmp(sym->hash_elt.name, ste->ht_elt.name))
                 continue;
diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c
index 2c1f03b..f17d91e 100644
--- a/dlls/dbghelp/msc.c
+++ b/dlls/dbghelp/msc.c
@@ -1025,7 +1025,7 @@ static struct symt* codeview_add_type_struct(struct codeview_type_parse* ctp,
         hash_table_iter_init(&ctp->module->ht_types, &hti, name);
         while ((ptr = hash_table_iter_up(&hti)))
         {
-            type = GET_ENTRY(ptr, struct symt_ht, hash_elt);
+            type = CONTAINING_RECORD(ptr, struct symt_ht, hash_elt);
 
             if (type->symt.tag == SymTagUDT &&
                 type->hash_elt.name && !strcmp(type->hash_elt.name, name))
@@ -2982,9 +2982,9 @@ static BOOL  pev_get_val(struct pevaluator* pev, const char* str, DWORD_PTR* val
         hash_table_iter_init(&pev->values, &hti, str);
         while ((ptr = hash_table_iter_up(&hti)))
         {
-            if (!strcmp(GET_ENTRY(ptr, struct zvalue, elt)->elt.name, str))
+            if (!strcmp(CONTAINING_RECORD(ptr, struct zvalue, elt)->elt.name, str))
             {
-                *val = GET_ENTRY(ptr, struct zvalue, elt)->value;
+                *val = CONTAINING_RECORD(ptr, struct zvalue, elt)->value;
                 return TRUE;
             }
         }
@@ -3037,9 +3037,9 @@ static BOOL  pev_set_value(struct pevaluator* pev, const char* name, DWORD_PTR v
     hash_table_iter_init(&pev->values, &hti, name);
     while ((ptr = hash_table_iter_up(&hti)))
     {
-        if (!strcmp(GET_ENTRY(ptr, struct zvalue, elt)->elt.name, name))
+        if (!strcmp(CONTAINING_RECORD(ptr, struct zvalue, elt)->elt.name, name))
         {
-            GET_ENTRY(ptr, struct zvalue, elt)->value = val;
+            CONTAINING_RECORD(ptr, struct zvalue, elt)->value = val;
             break;
         }
     }
diff --git a/dlls/dbghelp/pe_module.c b/dlls/dbghelp/pe_module.c
index b52d47e..e7255f8 100644
--- a/dlls/dbghelp/pe_module.c
+++ b/dlls/dbghelp/pe_module.c
@@ -369,7 +369,7 @@ static BOOL pe_locate_with_coff_symbol_table(struct module* module)
             hash_table_iter_init(&module->ht_symbols, &hti, name);
             while ((ptr = hash_table_iter_up(&hti)))
             {
-                sym = GET_ENTRY(ptr, struct symt_data, hash_elt);
+                sym = CONTAINING_RECORD(ptr, struct symt_data, hash_elt);
                 if (sym->symt.tag == SymTagData &&
                     (sym->kind == DataIsGlobal || sym->kind == DataIsFileStatic) &&
                     sym->u.var.kind == loc_absolute &&
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 7569a58..efcf7b6 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -422,7 +422,7 @@ struct symt_block* symt_close_func_block(struct module* module,
 
     if (pc) block->size = func->address + pc - block->address;
     return (block->container->tag == SymTagBlock) ? 
-        GET_ENTRY(block->container, struct symt_block, symt) : NULL;
+        CONTAINING_RECORD(block->container, struct symt_block, symt) : NULL;
 }
 
 struct symt_hierarchy_point* symt_add_function_point(struct module* module,
@@ -741,7 +741,7 @@ static BOOL symt_enum_module(struct module_pair* pair, const WCHAR* match,
     hash_table_iter_init(&pair->effective->ht_symbols, &hti, NULL);
     while ((ptr = hash_table_iter_up(&hti)))
     {
-        sym = GET_ENTRY(ptr, struct symt_ht, hash_elt);
+        sym = CONTAINING_RECORD(ptr, struct symt_ht, hash_elt);
         nameW = symt_get_nameW(&sym->symt);
         ret = SymMatchStringW(nameW, match, FALSE);
         HeapFree(GetProcessHeap(), 0, nameW);
@@ -1329,7 +1329,7 @@ static BOOL find_name(struct process* pcs, struct module* module, const char* na
     hash_table_iter_init(&pair.effective->ht_symbols, &hti, name);
     while ((ptr = hash_table_iter_up(&hti)))
     {
-        sym = GET_ENTRY(ptr, struct symt_ht, hash_elt);
+        sym = CONTAINING_RECORD(ptr, struct symt_ht, hash_elt);
 
         if (!strcmp(sym->hash_elt.name, name))
         {
@@ -2148,7 +2148,7 @@ BOOL WINAPI SymEnumLines(HANDLE hProcess, ULONG64 base, PCSTR compiland,
     {
         unsigned int    i;
 
-        sym = GET_ENTRY(ptr, struct symt_ht, hash_elt);
+        sym = CONTAINING_RECORD(ptr, struct symt_ht, hash_elt);
         if (sym->symt.tag != SymTagFunction) continue;
 
         sci.FileName[0] = '\0';
diff --git a/dlls/dbghelp/type.c b/dlls/dbghelp/type.c
index c0ffaa0..6ccbc9a 100644
--- a/dlls/dbghelp/type.c
+++ b/dlls/dbghelp/type.c
@@ -170,7 +170,7 @@ static struct symt* symt_find_type_by_name(const struct module* module,
     hash_table_iter_init(&module->ht_types, &hti, typename);
     while ((ptr = hash_table_iter_up(&hti)))
     {
-        type = GET_ENTRY(ptr, struct symt_ht, hash_elt);
+        type = CONTAINING_RECORD(ptr, struct symt_ht, hash_elt);
 
         if ((sym_tag == SymTagNull || type->symt.tag == sym_tag) &&
             type->hash_elt.name && !strcmp(type->hash_elt.name, typename))
-- 
2.5.0



More information about the wine-patches mailing list