Eric Pouech : dbghelp: Implemented SymEnumSymbolsW.

Alexandre Julliard julliard at wine.codeweavers.com
Thu May 11 05:56:23 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 208e701a7b4775ff828a9beecf6f2a758b91b8dc
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=208e701a7b4775ff828a9beecf6f2a758b91b8dc

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Wed May 10 21:35:41 2006 +0200

dbghelp: Implemented SymEnumSymbolsW.

---

 dlls/dbghelp/dbghelp.spec |    2 +-
 dlls/dbghelp/symbol.c     |   47 +++++++++++++++++++++++++++++++++++++++++++++
 include/dbghelp.h         |    3 +++
 3 files changed, 51 insertions(+), 1 deletions(-)

diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index 6916dce..a59ca40 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -39,7 +39,7 @@
 @ stub SymEnumSourceFilesW
 @ stub SymEnumSym
 @ stdcall SymEnumSymbols(ptr double str ptr ptr)
-@ stub SymEnumSymbolsW
+@ stdcall SymEnumSymbolsW(ptr double wstr ptr ptr)
 @ stub SymEnumSymbolsForAddr
 @ stub SymEnumSymbolsForAddrW
 @ stdcall SymEnumTypes(ptr double ptr ptr)
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 7707078..add5be6 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -902,6 +902,53 @@ BOOL WINAPI SymEnumSymbols(HANDLE hProce
     return sym_enum(hProcess, BaseOfDll, Mask, &se);
 }
 
+struct sym_enumW
+{
+    PSYM_ENUMERATESYMBOLS_CALLBACKW     cb;
+    void*                               ctx;
+    PSYMBOL_INFOW                       sym_info;
+    char                                buffer[sizeof(SYMBOL_INFOW) + MAX_SYM_NAME];
+
+};
+    
+static BOOL CALLBACK sym_enumW(PSYMBOL_INFO si, ULONG size, PVOID ctx)
+{
+    struct sym_enumW*   sew = ctx;
+
+    copy_symbolW(sew->sym_info, si);
+
+    return (sew->cb)(sew->sym_info, size, sew->ctx);
+}
+
+/******************************************************************
+ *		SymEnumSymbolsW (DBGHELP.@)
+ *
+ */
+BOOL WINAPI SymEnumSymbolsW(HANDLE hProcess, ULONG64 BaseOfDll, PCWSTR Mask,
+                            PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
+                            PVOID UserContext)
+{
+    struct sym_enumW    sew;
+    BOOL                ret = FALSE;
+    char*               maskA = NULL;
+
+    sew.ctx = UserContext;
+    sew.cb = EnumSymbolsCallback;
+    sew.sym_info = (PSYMBOL_INFOW)sew.buffer;
+
+    if (Mask)
+    {
+        unsigned len = WideCharToMultiByte(CP_ACP, 0, Mask, -1, NULL, 0, NULL, NULL);
+        maskA = HeapAlloc(GetProcessHeap(), 0, len);
+        if (!maskA) return FALSE;
+        WideCharToMultiByte(CP_ACP, 0, Mask, -1, maskA, len, NULL, NULL);
+    }
+    ret = SymEnumSymbols(hProcess, BaseOfDll, maskA, sym_enumW, &sew);
+    HeapFree(GetProcessHeap(), 0, maskA);
+
+    return ret;
+}
+
 struct sym_enumerate
 {
     void*                       ctx;
diff --git a/include/dbghelp.h b/include/dbghelp.h
index e66b088..b8a5c38 100644
--- a/include/dbghelp.h
+++ b/include/dbghelp.h
@@ -907,6 +907,7 @@ #define SYMSEARCH_GLOBALSONLY           
 
 BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
 BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
 BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
 BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*);
@@ -923,6 +924,8 @@ BOOL WINAPI SymGetSymPrev(HANDLE, PIMAGE
 BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64);
 BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
                            PVOID);
+BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW,
+                            PVOID);
 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PSTR, DWORD, ULONG, PVOID);
 BOOL WINAPI SymEnumerateSymbols(HANDLE, DWORD, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PSTR, DWORD64, ULONG, PVOID);




More information about the wine-cvs mailing list