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