Eric Pouech : dbghelp: Make elf_enum_modules a Unicode function.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Feb 22 05:56:49 CST 2007


Module: wine
Branch: master
Commit: 039d54a4bf4c9ee15669bbfedbcda6920ba3cfbc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=039d54a4bf4c9ee15669bbfedbcda6920ba3cfbc

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Wed Feb 21 21:56:17 2007 +0100

dbghelp: Make elf_enum_modules a Unicode function.

---

 dlls/dbghelp/dbghelp_private.h |    2 +-
 dlls/dbghelp/elf_module.c      |   19 +++++++++++++------
 dlls/dbghelp/minidump.c        |   10 +++++-----
 3 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index e4bc029..7335702 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -416,7 +416,7 @@ extern void*        fetch_buffer(struct process* pcs, unsigned size);
 
 /* elf_module.c */
 #define ELF_NO_MAP      ((const void*)0xffffffff)
-typedef BOOL (*elf_enum_modules_cb)(const char*, unsigned long addr, void* user);
+typedef BOOL (*elf_enum_modules_cb)(const WCHAR*, unsigned long addr, void* user);
 extern BOOL         elf_enum_modules(HANDLE hProc, elf_enum_modules_cb, void*);
 extern BOOL         elf_fetch_file_info(const char* name, DWORD* base, DWORD* size, DWORD* checksum);
 struct elf_file_map;
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index a404a73..f6f5117 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -1358,9 +1358,10 @@ static BOOL elf_enum_modules_internal(const struct process* pcs,
     void*               lm_addr;
     struct link_map     lm;
     char		bufstr[256];
+    WCHAR               bufstrW[MAX_PATH];
 
     if (!pcs->dbg_hdr_addr ||
-        !ReadProcessMemory(pcs->handle, (void*)pcs->dbg_hdr_addr, 
+        !ReadProcessMemory(pcs->handle, (void*)pcs->dbg_hdr_addr,
                            &dbg_hdr, sizeof(dbg_hdr), NULL))
         return FALSE;
 
@@ -1380,7 +1381,8 @@ static BOOL elf_enum_modules_internal(const struct process* pcs,
         {
 	    bufstr[sizeof(bufstr) - 1] = '\0';
             if (main_name && !bufstr[0]) strcpy(bufstr, main_name);
-            if (!cb(bufstr, (unsigned long)lm.l_addr, user)) break;
+            MultiByteToWideChar(CP_UNIXCP, 0, bufstr, -1, bufstrW, sizeof(bufstrW) / sizeof(WCHAR));
+            if (!cb(bufstrW, (unsigned long)lm.l_addr, user)) break;
 	}
     }
     return TRUE;
@@ -1392,14 +1394,16 @@ struct elf_sync
     struct elf_info     elf_info;
 };
 
-static BOOL elf_enum_sync_cb(const char* name, unsigned long addr, void* user)
+static BOOL elf_enum_sync_cb(const WCHAR* name, unsigned long addr, void* user)
 {
     struct elf_sync*    es = user;
+    char                tmp[MAX_PATH];
 
-    elf_search_and_load_file(es->pcs, name, addr, &es->elf_info);
+    WideCharToMultiByte(CP_UNIXCP, 0, name, -1, tmp, sizeof(tmp), 0, 0);
+    elf_search_and_load_file(es->pcs, tmp, addr, &es->elf_info);
     return TRUE;
 }
-    
+
 /******************************************************************
  *		elf_synchronize_module_list
  *
@@ -1520,10 +1524,13 @@ struct elf_load
  * Callback for elf_load_module, used to walk the list of loaded
  * modules.
  */
-static BOOL elf_load_cb(const char* name, unsigned long addr, void* user)
+static BOOL elf_load_cb(const WCHAR* nameW, unsigned long addr, void* user)
 {
     struct elf_load*    el = user;
     const char*         p;
+    char                name[MAX_PATH];
+
+    WideCharToMultiByte(CP_UNIXCP, 0, nameW, -1, name, sizeof(name), 0, 0);
 
     /* memcmp is needed for matches when bufstr contains also version information
      * el->name: libc.so, name: libc.so.6.0
diff --git a/dlls/dbghelp/minidump.c b/dlls/dbghelp/minidump.c
index 68c8f89..f512580 100644
--- a/dlls/dbghelp/minidump.c
+++ b/dlls/dbghelp/minidump.c
@@ -270,22 +270,22 @@ static BOOL WINAPI fetch_pe_module_info_cb(WCHAR* name, DWORD64 base, DWORD size
  *
  * Callback for accumulating in dump_context an ELF modules set
  */
-static BOOL fetch_elf_module_info_cb(const char* name, unsigned long base, 
+static BOOL fetch_elf_module_info_cb(const WCHAR* name, unsigned long base,
                                      void* user)
 {
     struct dump_context*        dc = (struct dump_context*)user;
     DWORD                       rbase, size, checksum;
-    WCHAR                       tmp[MAX_PATH];
+    char                        tmp[MAX_PATH];
 
     /* FIXME: there's no relevant timestamp on ELF modules */
     /* NB: if we have a non-null base from the live-target use it (whenever
      * the ELF module is relocatable or not). If we have a null base (ELF
      * module isn't relocatable) then grab its base address from ELF file
      */
-    if (!elf_fetch_file_info(name, &rbase, &size, &checksum))
+    WideCharToMultiByte(CP_UNIXCP, 0, name, -1, tmp, sizeof(tmp), 0, 0);
+    if (!elf_fetch_file_info(tmp, &rbase, &size, &checksum))
         size = checksum = 0;
-    MultiByteToWideChar(CP_UNIXCP, 0, name, -1, tmp, sizeof(tmp) / sizeof(WCHAR));
-    add_module(dc, tmp, base ? base : rbase, size, 0 /* FIXME */, checksum, TRUE);
+    add_module(dc, name, base ? base : rbase, size, 0 /* FIXME */, checksum, TRUE);
     return TRUE;
 }
 




More information about the wine-cvs mailing list