Module: wine Branch: master Commit: a3d9c487de0388ed0358fbd1f275c733e8d5225a URL: https://source.winehq.org/git/wine.git/?a=commit;h=a3d9c487de0388ed0358fbd1f...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Mar 30 09:59:01 2021 +0200
ntdll: Load builtin exe without a corresponding file only before the prefix is fully initialized.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/unix/loader.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index 40172afe4f1..9aab5102b8a 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -118,6 +118,7 @@ static char *argv0; static const char *bin_dir; static const char *dll_dir; static SIZE_T dll_path_maxlen; +static BOOL is_prefix_bootstrap;
const char *home_dir = NULL; const char *data_dir = NULL; @@ -310,6 +311,8 @@ static void set_config_dir(void) static void init_paths( char *argv[] ) { Dl_info info; + struct stat st; + char *ntdll;
argv0 = strdup( argv[0] );
@@ -332,6 +335,10 @@ static void init_paths( char *argv[] ) set_dll_path(); set_home_dir(); set_config_dir(); + + ntdll = build_path( config_dir, "dosdevices/c:/windows/system32/ntdll.dll" ); + is_prefix_bootstrap = stat( ntdll, &st ) == -1; + free( ntdll ); }
@@ -1456,6 +1463,8 @@ BOOL is_builtin_path( const UNICODE_STRING *path, WORD *machine ) 's','y','s','w','o','w','6','4'}; unsigned int len;
+ if (!is_prefix_bootstrap) return FALSE; + *machine = current_machine; if (path->Length > wcslen(system_dir) * sizeof(WCHAR) && !wcsnicmp( path->Buffer, system_dir, wcslen(system_dir) ))