[PATCH 2/3] dbghelp: Reimplement SymGetLineFromAddr using SymGetLineFromAddrW64.

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Mon Jun 3 01:00:01 CDT 2019


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/dbghelp/symbol.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 177c66480d..0f133c0d34 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -1598,6 +1598,22 @@ static void copy_line_32_from_64(IMAGEHLP_LINE* l32, const IMAGEHLP_LINE64* l64)
     l32->Address = l64->Address;
 }
 
+/******************************************************************
+ *		copy_line_32_from_64W (internal)
+ *
+ */
+static void copy_line_32_from_64W(struct process* pcs, IMAGEHLP_LINE* l32, const IMAGEHLP_LINEW64* l64w)
+{
+    char path[MAX_PATH];
+    unsigned len = WideCharToMultiByte(CP_ACP, 0, l64w->FileName, -1, path, MAX_PATH, NULL, NULL);
+
+    l32->Key = l64w->Key;
+    l32->LineNumber = l64w->LineNumber;
+    l32->FileName = fetch_buffer(pcs, len + 1);
+    lstrcpyA(l32->FileName, path);
+    l32->Address = l64w->Address;
+}
+
 /******************************************************************
  *		SymGetLineFromAddr (DBGHELP.@)
  *
@@ -1605,12 +1621,12 @@ static void copy_line_32_from_64(IMAGEHLP_LINE* l32, const IMAGEHLP_LINE64* l64)
 BOOL WINAPI SymGetLineFromAddr(HANDLE hProcess, DWORD dwAddr,
                                PDWORD pdwDisplacement, PIMAGEHLP_LINE Line)
 {
-    IMAGEHLP_LINE64     il64;
+    IMAGEHLP_LINEW64     il64w;
 
-    il64.SizeOfStruct = sizeof(il64);
-    if (!SymGetLineFromAddr64(hProcess, dwAddr, pdwDisplacement, &il64))
+    il64w.SizeOfStruct = sizeof(il64w);
+    if (!SymGetLineFromAddrW64(hProcess, dwAddr, pdwDisplacement, &il64w))
         return FALSE;
-    copy_line_32_from_64(Line, &il64);
+    copy_line_32_from_64W(process_find_by_handle(hProcess), Line, &il64w);
     return TRUE;
 }
 
-- 
2.17.1



More information about the wine-devel mailing list