Jacek Caban : ucrtbase: Add exe entry points implementation.

Alexandre Julliard julliard at winehq.org
Mon Mar 2 16:22:23 CST 2020


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Feb 28 15:25:23 2020 +0100

ucrtbase: Add exe entry points implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/crt_main.c    | 16 +++++++++++++++-
 dlls/msvcrt/crt_wmain.c   | 16 +++++++++++++++-
 dlls/ucrtbase/Makefile.in |  5 +++++
 3 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/dlls/msvcrt/crt_main.c b/dlls/msvcrt/crt_main.c
index 81ec188058..fa325d64b3 100644
--- a/dlls/msvcrt/crt_main.c
+++ b/dlls/msvcrt/crt_main.c
@@ -24,7 +24,12 @@
 
 #ifdef __MINGW32__
 
+#if _MSVCR_VER >= 140
+#define _UCRT
+#endif
+
 #include <stdarg.h>
+#include <stdlib.h>
 #include <process.h>
 
 #include "windef.h"
@@ -40,10 +45,19 @@ static const IMAGE_NT_HEADERS *get_nt_header( void )
 
 int __cdecl mainCRTStartup(void)
 {
-    int argc, new_mode =  0, ret;
+    int argc, ret;
     char **argv, **env;
 
+#ifdef _UCRT
+    _configure_narrow_argv(_crt_argv_unexpanded_arguments);
+    _initialize_narrow_environment();
+    argc = *__p___argc();
+    argv = *__p___argv();
+    env = _get_initial_narrow_environment();
+#else
+    int new_mode =  0;
     __getmainargs(&argc, &argv, &env, 0, &new_mode);
+#endif
     _set_app_type(get_nt_header()->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI ? _crt_gui_app : _crt_console_app);
 
     ret = main(argc, argv, env);
diff --git a/dlls/msvcrt/crt_wmain.c b/dlls/msvcrt/crt_wmain.c
index 77eb4dbfa7..6bc20e2e0f 100644
--- a/dlls/msvcrt/crt_wmain.c
+++ b/dlls/msvcrt/crt_wmain.c
@@ -24,7 +24,12 @@
 
 #ifdef __MINGW32__
 
+#if _MSVCR_VER >= 140
+#define _UCRT
+#endif
+
 #include <stdarg.h>
+#include <stdlib.h>
 #include <process.h>
 
 #include "windef.h"
@@ -40,10 +45,19 @@ static const IMAGE_NT_HEADERS *get_nt_header( void )
 
 int __cdecl wmainCRTStartup(void)
 {
-    int argc, new_mode =  0, ret;
+    int argc, ret;
     WCHAR **argv, **env;
 
+#ifdef _UCRT
+    _configure_wide_argv(_crt_argv_unexpanded_arguments);
+    _initialize_wide_environment();
+    argc = *__p___argc();
+    argv = *__p___wargv();
+    env = _get_initial_wide_environment();
+#else
+    int new_mode =  0;
     __wgetmainargs(&argc, &argv, &env, 0, &new_mode);
+#endif
     _set_app_type(get_nt_header()->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI ? _crt_gui_app : _crt_console_app);
 
     ret = wmain(argc, argv, env);
diff --git a/dlls/ucrtbase/Makefile.in b/dlls/ucrtbase/Makefile.in
index 2caef7c8c7..6711b4e66c 100644
--- a/dlls/ucrtbase/Makefile.in
+++ b/dlls/ucrtbase/Makefile.in
@@ -7,6 +7,11 @@ PARENTSRC = ../msvcrt
 C_SRCS = \
 	console.c \
 	cpp.c \
+	crt_gccmain.c \
+	crt_main.c \
+	crt_winmain.c \
+	crt_wmain.c \
+	crt_wwinmain.c \
 	ctype.c \
 	data.c \
 	dir.c \




More information about the wine-cvs mailing list