Alexandre Julliard : ntdll: Don't use libwine during the Unix library initialization.

Alexandre Julliard julliard at winehq.org
Tue May 19 16:07:49 CDT 2020


Module: wine
Branch: master
Commit: 67bc4a6d765941d830477f749ab7b0697f1488b2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=67bc4a6d765941d830477f749ab7b0697f1488b2

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue May 19 14:08:30 2020 +0200

ntdll: Don't use libwine during the Unix library initialization.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/unix/loader.c | 35 +++++++++++++++++++++--------------
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index 427eeaf413..9028b2de81 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -156,6 +156,17 @@ static void fatal_error( const char *err, ... )
     exit(1);
 }
 
+static void set_max_limit( int limit )
+{
+    struct rlimit rlimit;
+
+    if (!getrlimit( limit, &rlimit ))
+    {
+        rlimit.rlim_cur = rlimit.rlim_max;
+        setrlimit( limit, &rlimit );
+    }
+}
+
 /* canonicalize path and return its directory name */
 static char *realpath_dirname( const char *name )
 {
@@ -905,23 +916,11 @@ static void check_vmsplit( void *stack )
     }
 }
 
-static void set_max_limit( int limit )
-{
-    struct rlimit rlimit;
-
-    if (!getrlimit( limit, &rlimit ))
-    {
-        rlimit.rlim_cur = rlimit.rlim_max;
-        setrlimit( limit, &rlimit );
-    }
-}
-
 static int pre_exec(void)
 {
     int temp;
 
     check_vmsplit( &temp );
-    set_max_limit( RLIMIT_AS );
 #ifdef __i386__
     return 1;  /* we have a preloader on x86 */
 #else
@@ -1004,7 +1003,6 @@ void __wine_main( int argc, char *argv[], char *envp[] )
 {
     HMODULE module;
 
-    wine_init_argv0_path( argv[0] );
     init_paths( argc, argv, envp );
 
     if (!getenv( "WINELOADERNOEXEC" ))  /* first time around */
@@ -1015,11 +1013,20 @@ void __wine_main( int argc, char *argv[], char *envp[] )
         check_command_line( argc, argv );
         if (pre_exec())
         {
-            wine_exec_wine_binary( NULL, argv, getenv( "WINELOADER" ));
+            char **new_argv = malloc( (argc + 2) * sizeof(*argv) );
+            memcpy( new_argv + 1, argv, (argc + 1) * sizeof(*argv) );
+            loader_exec( argv0, new_argv, is_win64 );
             fatal_error( "could not exec the wine loader\n" );
         }
     }
 
+#ifdef RLIMIT_NOFILE
+    set_max_limit( RLIMIT_NOFILE );
+#endif
+#ifdef RLIMIT_AS
+    set_max_limit( RLIMIT_AS );
+#endif
+
     virtual_init();
 
     module = load_ntdll();




More information about the wine-cvs mailing list