[PATCH 04/26] [DbgHelp]: make the module info functions ready for the Unicode move

Eric Pouech eric.pouech at wanadoo.fr
Wed Feb 21 14:54:49 CST 2007




A+
---

 dlls/dbghelp/module.c |  216 +++++++++++++++++++++++++++----------------------
 1 files changed, 119 insertions(+), 97 deletions(-)

diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c
index 975792e..dca48e8 100644
--- a/dlls/dbghelp/module.c
+++ b/dlls/dbghelp/module.c
@@ -31,6 +31,7 @@ #include "winreg.h"
 #include "winternl.h"
 #include "wine/debug.h"
 #include "winnls.h"
+#include "wine/unicode.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(dbghelp);
 
@@ -736,36 +737,30 @@ BOOL  WINAPI EnumerateLoadedModulesW64(H
 BOOL  WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr, 
                               PIMAGEHLP_MODULE ModuleInfo)
 {
-    struct process*     pcs = process_find_by_handle(hProcess);
-    struct module*      module;
-    IMAGEHLP_MODULE     mod;
+    IMAGEHLP_MODULE     mi;
+    IMAGEHLP_MODULEW64  miw64;
 
-    if (!pcs) return FALSE;
-    if (ModuleInfo->SizeOfStruct < sizeof(*ModuleInfo)) return FALSE;
-    module = module_find_by_addr(pcs, dwAddr, DMT_UNKNOWN);
-    if (!module) return FALSE;
+    if (sizeof(mi) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n");
 
-    mod.SizeOfStruct = ModuleInfo->SizeOfStruct;
-    mod.BaseOfImage = module->module.BaseOfImage;
-    mod.ImageSize = module->module.ImageSize;
-    mod.TimeDateStamp = module->module.TimeDateStamp;
-    mod.CheckSum = module->module.CheckSum;
-    mod.NumSyms = module->module.NumSyms;
-    mod.SymType = module->module.SymType;
-    strcpy(mod.ModuleName, module->module.ModuleName);
-    strcpy(mod.ImageName, module->module.ImageName);
-    strcpy(mod.LoadedImageName, module->module.LoadedImageName);
+    miw64.SizeOfStruct = sizeof(miw64);
+    if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE;
+
+    mi.SizeOfStruct  = miw64.SizeOfStruct;
+    mi.BaseOfImage   = miw64.BaseOfImage;
+    mi.ImageSize     = miw64.ImageSize;
+    mi.TimeDateStamp = miw64.TimeDateStamp;
+    mi.CheckSum      = miw64.CheckSum;
+    mi.NumSyms       = miw64.NumSyms;
+    mi.SymType       = miw64.SymType;
+    WideCharToMultiByte(CP_ACP, 0, miw64.ModuleName, -1,   
+                        mi.ModuleName, sizeof(mi.ModuleName), NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, miw64.ImageName, -1,   
+                        mi.ImageName, sizeof(mi.ImageName), NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, miw64.LoadedImageName, -1,   
+                        mi.LoadedImageName, sizeof(mi.LoadedImageName), NULL, NULL);
+
+    memcpy(ModuleInfo, &mi, ModuleInfo->SizeOfStruct);
 
-    if (module->module.SymType == SymNone)
-    {
-        module = module_get_container(pcs, module);
-        if (module && module->module.SymType != SymNone)
-        {
-            mod.SymType = module->module.SymType;
-            mod.NumSyms = module->module.NumSyms;
-        }
-    }
-    memcpy(ModuleInfo, &mod, ModuleInfo->SizeOfStruct);
     return TRUE;
 }
 
@@ -776,27 +771,24 @@ BOOL  WINAPI SymGetModuleInfo(HANDLE hPr
 BOOL  WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr, 
                                PIMAGEHLP_MODULEW ModuleInfo)
 {
-    IMAGEHLP_MODULE     mi;
+    IMAGEHLP_MODULEW64  miw64;
     IMAGEHLP_MODULEW    miw;
 
     if (sizeof(miw) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n");
 
-    mi.SizeOfStruct = sizeof(mi);
-    if (!SymGetModuleInfo(hProcess, dwAddr, &mi)) return FALSE;
-
-    miw.SizeOfStruct  = mi.SizeOfStruct;
-    miw.BaseOfImage   = mi.BaseOfImage;
-    miw.ImageSize     = mi.ImageSize;
-    miw.TimeDateStamp = mi.TimeDateStamp;
-    miw.CheckSum      = mi.CheckSum;
-    miw.NumSyms       = mi.NumSyms;
-    miw.SymType       = mi.SymType;
-    MultiByteToWideChar(CP_ACP, 0, mi.ModuleName, -1,   
-                        miw.ModuleName, sizeof(miw.ModuleName) / sizeof(WCHAR));
-    MultiByteToWideChar(CP_ACP, 0, mi.ImageName, -1,   
-                        miw.ImageName, sizeof(miw.ImageName) / sizeof(WCHAR));
-    MultiByteToWideChar(CP_ACP, 0, mi.LoadedImageName, -1,   
-                        miw.LoadedImageName, sizeof(miw.LoadedImageName) / sizeof(WCHAR));
+    miw64.SizeOfStruct = sizeof(miw64);
+    if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE;
+
+    miw.SizeOfStruct  = miw64.SizeOfStruct;
+    miw.BaseOfImage   = miw64.BaseOfImage;
+    miw.ImageSize     = miw64.ImageSize;
+    miw.TimeDateStamp = miw64.TimeDateStamp;
+    miw.CheckSum      = miw64.CheckSum;
+    miw.NumSyms       = miw64.NumSyms;
+    miw.SymType       = miw64.SymType;
+    strcpyW(miw.ModuleName, miw64.ModuleName);
+    strcpyW(miw.ImageName, miw64.ImageName);
+    strcpyW(miw.LoadedImageName, miw64.LoadedImageName);
     memcpy(ModuleInfo, &miw, ModuleInfo->SizeOfStruct);
 
     return TRUE;
@@ -809,8 +801,59 @@ BOOL  WINAPI SymGetModuleInfoW(HANDLE hP
 BOOL  WINAPI SymGetModuleInfo64(HANDLE hProcess, DWORD64 dwAddr, 
                                 PIMAGEHLP_MODULE64 ModuleInfo)
 {
+    IMAGEHLP_MODULE64   mi64;
+    IMAGEHLP_MODULEW64  miw64;
+
+    if (sizeof(mi64) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n");
+
+    miw64.SizeOfStruct = sizeof(miw64);
+    if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE;
+
+    mi64.SizeOfStruct  = miw64.SizeOfStruct;
+    mi64.BaseOfImage   = miw64.BaseOfImage;
+    mi64.ImageSize     = miw64.ImageSize;
+    mi64.TimeDateStamp = miw64.TimeDateStamp;
+    mi64.CheckSum      = miw64.CheckSum;
+    mi64.NumSyms       = miw64.NumSyms;
+    mi64.SymType       = miw64.SymType;
+    WideCharToMultiByte(CP_ACP, 0, miw64.ModuleName, -1,   
+                        mi64.ModuleName, sizeof(mi64.ModuleName), NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, miw64.ImageName, -1,   
+                        mi64.ImageName, sizeof(mi64.ImageName), NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, miw64.LoadedImageName, -1,   
+                        mi64.LoadedImageName, sizeof(mi64.LoadedImageName), NULL, NULL);
+    WideCharToMultiByte(CP_ACP, 0, miw64.LoadedPdbName, -1,   
+                        mi64.LoadedPdbName, sizeof(mi64.LoadedPdbName), NULL, NULL);
+
+    mi64.CVSig         = miw64.CVSig;
+    WideCharToMultiByte(CP_ACP, 0, miw64.CVData, -1,   
+                        mi64.CVData, sizeof(mi64.CVData), NULL, NULL);
+    mi64.PdbSig        = miw64.PdbSig;
+    mi64.PdbSig70      = miw64.PdbSig70;
+    mi64.PdbAge        = miw64.PdbAge;
+    mi64.PdbUnmatched  = miw64.PdbUnmatched;
+    mi64.DbgUnmatched  = miw64.DbgUnmatched;
+    mi64.LineNumbers   = miw64.LineNumbers;
+    mi64.GlobalSymbols = miw64.GlobalSymbols;
+    mi64.TypeInfo      = miw64.TypeInfo;
+    mi64.SourceIndexed = miw64.SourceIndexed;
+    mi64.Publics       = miw64.Publics;
+
+    memcpy(ModuleInfo, &mi64, ModuleInfo->SizeOfStruct);
+
+    return TRUE;
+}
+
+/******************************************************************
+ *		SymGetModuleInfoW64 (DBGHELP.@)
+ *
+ */
+BOOL  WINAPI SymGetModuleInfoW64(HANDLE hProcess, DWORD64 dwAddr, 
+                                 PIMAGEHLP_MODULEW64 ModuleInfo)
+{
     struct process*     pcs = process_find_by_handle(hProcess);
     struct module*      module;
+    IMAGEHLP_MODULEW64  miw64;
 
     TRACE("%p %s %p\n", hProcess, wine_dbgstr_longlong(dwAddr), ModuleInfo);
 
@@ -819,67 +862,46 @@ BOOL  WINAPI SymGetModuleInfo64(HANDLE h
     module = module_find_by_addr(pcs, dwAddr, DMT_UNKNOWN);
     if (!module) return FALSE;
 
-    memcpy(ModuleInfo, &module->module, ModuleInfo->SizeOfStruct);
+    miw64.SizeOfStruct  = sizeof(miw64);
+    miw64.BaseOfImage   = module->module.BaseOfImage;
+    miw64.ImageSize     = module->module.ImageSize;
+    miw64.TimeDateStamp = module->module.TimeDateStamp;
+    miw64.CheckSum      = module->module.CheckSum;
+    miw64.NumSyms       = module->module.NumSyms;
+    miw64.SymType       = module->module.SymType;
+    MultiByteToWideChar(CP_ACP, 0, module->module.ModuleName, -1,   
+                        miw64.ModuleName, sizeof(miw64.ModuleName) / sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, module->module.ImageName, -1,   
+                        miw64.ImageName, sizeof(miw64.ImageName) / sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, module->module.LoadedImageName, -1,   
+                        miw64.LoadedImageName, sizeof(miw64.LoadedImageName) / sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, module->module.LoadedPdbName, -1,   
+                        miw64.LoadedPdbName, sizeof(miw64.LoadedPdbName) / sizeof(WCHAR));
+
+    miw64.CVSig         = module->module.CVSig;
+    MultiByteToWideChar(CP_ACP, 0, module->module.CVData, -1,   
+                        miw64.CVData, sizeof(miw64.CVData) / sizeof(WCHAR));
+    miw64.PdbSig        = module->module.PdbSig;
+    miw64.PdbSig70      = module->module.PdbSig70;
+    miw64.PdbAge        = module->module.PdbAge;
+    miw64.PdbUnmatched  = module->module.PdbUnmatched;
+    miw64.DbgUnmatched  = module->module.DbgUnmatched;
+    miw64.LineNumbers   = module->module.LineNumbers;
+    miw64.GlobalSymbols = module->module.GlobalSymbols;
+    miw64.TypeInfo      = module->module.TypeInfo;
+    miw64.SourceIndexed = module->module.SourceIndexed;
+    miw64.Publics       = module->module.Publics;
 
     if (module->module.SymType == SymNone)
     {
         module = module_get_container(pcs, module);
         if (module && module->module.SymType != SymNone)
         {
-            ModuleInfo->SymType = module->module.SymType;
-            ModuleInfo->NumSyms = module->module.NumSyms;
+            miw64.SymType = module->module.SymType;
+            miw64.NumSyms = module->module.NumSyms;
         }
     }
-    return TRUE;
-}
-
-/******************************************************************
- *		SymGetModuleInfoW64 (DBGHELP.@)
- *
- */
-BOOL  WINAPI SymGetModuleInfoW64(HANDLE hProcess, DWORD64 dwAddr, 
-                                 PIMAGEHLP_MODULEW64 ModuleInfo)
-{
-    IMAGEHLP_MODULE64   mi;
-    IMAGEHLP_MODULEW64  miw;
-
-    if (sizeof(miw) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n");
-
-    mi.SizeOfStruct = sizeof(mi);
-    if (!SymGetModuleInfo64(hProcess, dwAddr, &mi)) return FALSE;
-
-    miw.SizeOfStruct  = mi.SizeOfStruct;
-    miw.BaseOfImage   = mi.BaseOfImage;
-    miw.ImageSize     = mi.ImageSize;
-    miw.TimeDateStamp = mi.TimeDateStamp;
-    miw.CheckSum      = mi.CheckSum;
-    miw.NumSyms       = mi.NumSyms;
-    miw.SymType       = mi.SymType;
-    MultiByteToWideChar(CP_ACP, 0, mi.ModuleName, -1,   
-                        miw.ModuleName, sizeof(miw.ModuleName) / sizeof(WCHAR));
-    MultiByteToWideChar(CP_ACP, 0, mi.ImageName, -1,   
-                        miw.ImageName, sizeof(miw.ImageName) / sizeof(WCHAR));
-    MultiByteToWideChar(CP_ACP, 0, mi.LoadedImageName, -1,   
-                        miw.LoadedImageName, sizeof(miw.LoadedImageName) / sizeof(WCHAR));
-    MultiByteToWideChar(CP_ACP, 0, mi.LoadedPdbName, -1,   
-                        miw.LoadedPdbName, sizeof(miw.LoadedPdbName) / sizeof(WCHAR));
-
-    miw.CVSig         = mi.CVSig;
-    MultiByteToWideChar(CP_ACP, 0, mi.CVData, -1,   
-                        miw.CVData, sizeof(miw.CVData) / sizeof(WCHAR));
-    miw.PdbSig        = mi.PdbSig;
-    miw.PdbSig70      = mi.PdbSig70;
-    miw.PdbAge        = mi.PdbAge;
-    miw.PdbUnmatched  = mi.PdbUnmatched;
-    miw.DbgUnmatched  = mi.DbgUnmatched;
-    miw.LineNumbers   = mi.LineNumbers;
-    miw.GlobalSymbols = mi.GlobalSymbols;
-    miw.TypeInfo      = mi.TypeInfo;
-    miw.SourceIndexed = mi.SourceIndexed;
-    miw.Publics       = mi.Publics;
-
-    memcpy(ModuleInfo, &miw, ModuleInfo->SizeOfStruct);
-
+    memcpy(ModuleInfo, &miw64, ModuleInfo->SizeOfStruct);
     return TRUE;
 }
 



More information about the wine-patches mailing list