Signed-off-by: Alistair Leslie-Hughes leslie_alistair@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; }