Gijs Vermeulen : dbghelp: Implement SymFromNameW().

Alexandre Julliard julliard at winehq.org
Thu Apr 22 15:55:25 CDT 2021


Module: wine
Branch: master
Commit: 8d260b40fca92a3423b7764a8b6b803e8c74b46d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8d260b40fca92a3423b7764a8b6b803e8c74b46d

Author: Gijs Vermeulen <gijsvrm at gmail.com>
Date:   Thu Apr 22 12:20:18 2021 +0200

dbghelp: Implement SymFromNameW().

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50829
Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dbghelp/dbghelp.spec |  2 +-
 dlls/dbghelp/symbol.c     | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index b17c7b18655..73455c547e8 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -75,7 +75,7 @@
 @ stdcall SymFromIndex(long int64 long ptr)
 @ stdcall SymFromIndexW(long int64 long ptr)
 @ stdcall SymFromName(long str ptr)
-@ stub SymFromNameW
+@ stdcall SymFromNameW(long wstr ptr)
 @ stub SymFromToken
 @ stub SymFromTokenW
 @ stdcall SymFunctionTableAccess(long long)
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 2ca85a6d6e8..b2b4d578910 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -1404,6 +1404,39 @@ BOOL WINAPI SymFromName(HANDLE hProcess, PCSTR Name, PSYMBOL_INFO Symbol)
     return FALSE;
 }
 
+/***********************************************************************
+ *      SymFromNameW (DBGHELP.@)
+ */
+BOOL WINAPI SymFromNameW(HANDLE process, const WCHAR *name, SYMBOL_INFOW *symbol)
+{
+    SYMBOL_INFO *si;
+    DWORD len;
+    char *tmp;
+    BOOL ret;
+
+    TRACE("(%p, %s, %p)\n", process, debugstr_w(name), symbol);
+
+    len = sizeof(*si) + symbol->MaxNameLen * sizeof(WCHAR);
+    if (!(si = HeapAlloc(GetProcessHeap(), 0, len))) return FALSE;
+
+    len = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL);
+    if (!(tmp = HeapAlloc(GetProcessHeap(), 0, len)))
+    {
+        HeapFree(GetProcessHeap(), 0, si);
+        return FALSE;
+    }
+    WideCharToMultiByte(CP_ACP, 0, name, -1, tmp, len, NULL, NULL);
+
+    si->SizeOfStruct = sizeof(*si);
+    si->MaxNameLen = symbol->MaxNameLen;
+    if ((ret = SymFromName(process, tmp, si)))
+        copy_symbolW(symbol, si);
+
+    HeapFree(GetProcessHeap(), 0, tmp);
+    HeapFree(GetProcessHeap(), 0, si);
+    return ret;
+}
+
 /***********************************************************************
  *		SymGetSymFromName64 (DBGHELP.@)
  */




More information about the wine-cvs mailing list