Module: wine Branch: master Commit: 7694da86abe4c3c8fda662af157072ed36314615 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7694da86abe4c3c8fda662af15...
Author: Eric Pouech eric.pouech@wanadoo.fr Date: Wed Feb 21 21:56:06 2007 +0100
winedbg: Some enhancements by using Unicode flavors.
---
programs/winedbg/tgt_minidump.c | 42 +++++++++++++++++--------------------- 1 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/programs/winedbg/tgt_minidump.c b/programs/winedbg/tgt_minidump.c index 6b65747..34e5b17 100644 --- a/programs/winedbg/tgt_minidump.c +++ b/programs/winedbg/tgt_minidump.c @@ -132,7 +132,7 @@ static BOOL WINAPI tgt_process_minidump_write(HANDLE hProcess, void* addr, return FALSE; }
-BOOL CALLBACK validate_file(PSTR name, void* user) +BOOL CALLBACK validate_file(PCWSTR name, void* user) { return FALSE; /* get the first file we find !! */ } @@ -149,7 +149,7 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data) MINIDUMP_MODULE* mm; MINIDUMP_STRING* mds; char exec_name[1024]; - char name[1024]; + WCHAR nameW[1024]; unsigned len;
/* fetch PID */ @@ -173,17 +173,16 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data) mds = (MINIDUMP_STRING*)((char*)data->mapping + mm->ModuleNameRva); len = WideCharToMultiByte(CP_ACP, 0, mds->Buffer, mds->Length / sizeof(WCHAR), - name, sizeof(name) - 1, NULL, NULL); - name[len] = 0; - for (ptr = name + len - 1; ptr >= name; ptr--) + exec_name, sizeof(exec_name) - 1, NULL, NULL); + exec_name[len] = 0; + for (ptr = exec_name + len - 1; ptr >= exec_name; ptr--) { if (*ptr == '/' || *ptr == '\') { - strcpy(exec_name, ptr + 1); + memmove(exec_name, ptr + 1, strlen(ptr + 1) + 1); break; } } - if (ptr < name) strcpy(exec_name, name); } }
@@ -294,22 +293,21 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data) if (MiniDumpReadDumpStream(data->mapping, Wine_ElfModuleListStream, &dir, &stream, &size)) { - char buffer[MAX_PATH]; + WCHAR buffer[MAX_PATH];
mml = (MINIDUMP_MODULE_LIST*)stream; for (i = 0, mm = &mml->Modules[0]; i < mml->NumberOfModules; i++, mm++) { mds = (MINIDUMP_STRING*)((char*)data->mapping + mm->ModuleNameRva); - len = WideCharToMultiByte(CP_ACP, 0, mds->Buffer, - mds->Length / sizeof(WCHAR), - name, sizeof(name) - 1, NULL, NULL); - name[len] = 0; - if (SymFindFileInPath(hProc, NULL, name, (void*)(DWORD_PTR)mm->CheckSum, - 0, 0, SSRVOPT_DWORD, buffer, validate_file, NULL)) - SymLoadModule(hProc, NULL, buffer, NULL, mm->BaseOfImage, mm->SizeOfImage); + memcpy(nameW, mds->Buffer, mds->Length); + nameW[mds->Length / sizeof(WCHAR)] = 0; + if (SymFindFileInPathW(hProc, NULL, nameW, (void*)(DWORD_PTR)mm->CheckSum, + 0, 0, SSRVOPT_DWORD, buffer, validate_file, NULL)) + SymLoadModuleExW(hProc, NULL, buffer, NULL, mm->BaseOfImage, mm->SizeOfImage, + NULL, 0); else - SymLoadModuleEx(hProc, NULL, name, NULL, mm->BaseOfImage, mm->SizeOfImage, - NULL, SLMFLAG_VIRTUAL); + SymLoadModuleExW(hProc, NULL, nameW, NULL, mm->BaseOfImage, mm->SizeOfImage, + NULL, SLMFLAG_VIRTUAL); } } if (MiniDumpReadDumpStream(data->mapping, ModuleListStream, &dir, &stream, &size)) @@ -318,12 +316,10 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data) for (i = 0, mm = &mml->Modules[0]; i < mml->NumberOfModules; i++, mm++) { mds = (MINIDUMP_STRING*)((char*)data->mapping + mm->ModuleNameRva); - len = WideCharToMultiByte(CP_ACP, 0, mds->Buffer, - mds->Length / sizeof(WCHAR), - name, sizeof(name) - 1, NULL, NULL); - name[len] = 0; - SymLoadModule(hProc, NULL, name, NULL, - mm->BaseOfImage, mm->SizeOfImage); + memcpy(nameW, mds->Buffer, mds->Length); + nameW[mds->Length / sizeof(WCHAR)] = 0; + SymLoadModuleExW(hProc, NULL, nameW, NULL, mm->BaseOfImage, mm->SizeOfImage, + NULL, 0); } } if (MiniDumpReadDumpStream(data->mapping, ExceptionStream, &dir, &stream, &size))