[WINESYNC] dbghelp: Use debuggee environment in search_unix_path.
authorwinesync <ros-dev@reactos.org>
Fri, 11 Sep 2020 17:12:24 +0000 (19:12 +0200)
committerJérôme Gardou <jerome.gardou@reactos.org>
Wed, 16 Sep 2020 08:36:00 +0000 (10:36 +0200)
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
wine commit id 7b6f6257bc7e9d8f8a93dfa969510ab4aa16e765 by Jacek Caban <jacek@codeweavers.com>

dll/win32/dbghelp/dbghelp_private.h
dll/win32/dbghelp/elf_module.c
dll/win32/dbghelp/macho_module.c
dll/win32/dbghelp/path.c
sdk/tools/winesync/dbghelp.cfg

index 434e157..3e307fa 100644 (file)
@@ -707,7 +707,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;
 
index 00e5c12..e44629f 100644 (file)
@@ -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);
     }
 
index 0554957..8e91577 100644 (file)
@@ -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)
index 87eeb93..2681c40 100644 (file)
@@ -780,9 +780,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;
@@ -791,16 +791,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)))
index 29c754a..edefd93 100644 (file)
@@ -4,4 +4,4 @@ files:
   include/dbghelp.h: sdk/include/psdk/dbghelp.h
   include/wine/mscvpdb.h: sdk/include/reactos/wine/mscvpdb.h
 tags:
-  wine: ab4665f4ae3c67317e21d42868cae0af72ffcb7a
+  wine: 7b6f6257bc7e9d8f8a93dfa969510ab4aa16e765