diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h index 4a6e4814490..13e98b3b5f6 100644 --- a/dlls/dbghelp/dbghelp_private.h +++ b/dlls/dbghelp/dbghelp_private.h @@ -674,7 +674,7 @@ extern BOOL path_find_symbol_file(const struct process* pcs, const struc extern WCHAR *get_dos_file_name(const WCHAR *filename) DECLSPEC_HIDDEN; extern BOOL search_dll_path(const struct process* process, const WCHAR *name, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) DECLSPEC_HIDDEN; -extern BOOL search_unix_path(const WCHAR *name, const char *path, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) DECLSPEC_HIDDEN; +extern BOOL search_unix_path(const WCHAR *name, const WCHAR *path, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) DECLSPEC_HIDDEN; extern const WCHAR* file_name(const WCHAR* str) DECLSPEC_HIDDEN; extern const char* file_nameA(const char* str) DECLSPEC_HIDDEN; diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c index 00e5c12c2e6..e44629f016e 100644 --- a/dlls/dbghelp/elf_module.c +++ b/dlls/dbghelp/elf_module.c @@ -1435,7 +1435,7 @@ static BOOL elf_search_and_load_file(struct process* pcs, const WCHAR* filename, load_elf.dyn_addr = dyn_addr; load_elf.elf_info = elf_info; - ret = search_unix_path(filename, getenv("LD_LIBRARY_PATH"), elf_load_file_cb, &load_elf) + ret = search_unix_path(filename, process_getenv(pcs, L"LD_LIBRARY_PATH"), elf_load_file_cb, &load_elf) || search_dll_path(pcs, filename, elf_load_file_cb, &load_elf); } diff --git a/dlls/dbghelp/macho_module.c b/dlls/dbghelp/macho_module.c index 05549571c5e..8e91577e449 100644 --- a/dlls/dbghelp/macho_module.c +++ b/dlls/dbghelp/macho_module.c @@ -1574,7 +1574,7 @@ static BOOL macho_search_and_load_file(struct process* pcs, const WCHAR* filenam /* Try DYLD_LIBRARY_PATH first. */ p = file_name(filename); - ret = search_unix_path(p, getenv("DYLD_LIBRARY_PATH"), macho_load_file_cb, &load_params); + ret = search_unix_path(p, process_getenv(pcs, L"DYLD_LIBRARY_PATH"), macho_load_file_cb, &load_params); /* Try the path as given. */ if (!ret) @@ -1582,9 +1582,9 @@ static BOOL macho_search_and_load_file(struct process* pcs, const WCHAR* filenam /* Try DYLD_FALLBACK_LIBRARY_PATH, with just the filename (no directories). */ if (!ret) { - const char* fallback = getenv("DYLD_FALLBACK_LIBRARY_PATH"); + const WCHAR* fallback = process_getenv(pcs, L"DYLD_FALLBACK_LIBRARY_PATH"); if (!fallback) - fallback = "/usr/local/lib:/lib:/usr/lib"; + fallback = L"/usr/local/lib:/lib:/usr/lib"; ret = search_unix_path(p, fallback, macho_load_file_cb, &load_params); } if (!ret && p == filename) diff --git a/dlls/dbghelp/path.c b/dlls/dbghelp/path.c index 20dab8b498a..82ba032145e 100644 --- a/dlls/dbghelp/path.c +++ b/dlls/dbghelp/path.c @@ -779,9 +779,9 @@ found: return TRUE; } -BOOL search_unix_path(const WCHAR *name, const char *path, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) +BOOL search_unix_path(const WCHAR *name, const WCHAR *path, BOOL (*match)(void*, HANDLE, const WCHAR*), void *param) { - const char *iter, *next; + const WCHAR *iter, *next; size_t size, len; WCHAR *dos_path; char *buf; @@ -790,16 +790,16 @@ BOOL search_unix_path(const WCHAR *name, const char *path, BOOL (*match)(void*, if (!path) return FALSE; name = file_name(name); - size = WideCharToMultiByte(CP_UNIXCP, 0, name, -1, NULL, 0, NULL, NULL) + strlen(path) + 1; + size = WideCharToMultiByte(CP_UNIXCP, 0, name, -1, NULL, 0, NULL, NULL) + + WideCharToMultiByte(CP_UNIXCP, 0, path, -1, NULL, 0, NULL, NULL); if (!(buf = heap_alloc(size))) return FALSE; for (iter = path;; iter = next + 1) { - if (!(next = strchr(iter, ':'))) next = iter + strlen(iter); + if (!(next = wcschr(iter, ':'))) next = iter + lstrlenW(iter); if (*iter == '/') { - len = next - iter; - memcpy(buf, iter, len); + len = WideCharToMultiByte(CP_UNIXCP, 0, iter, next - iter, buf, size, NULL, NULL); if (buf[len - 1] != '/') buf[len++] = '/'; WideCharToMultiByte(CP_UNIXCP, 0, name, -1, buf + len, size - len, NULL, NULL); if ((dos_path = wine_get_dos_file_name(buf)))