From 78eca968878cfac7f5b75ca9ccb3f2ad5100309d Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 28 Feb 2020 15:25:23 +0100 Subject: [PATCH] ucrtbase: Add exe entry points implementation. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- 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 81ec1880582..fa325d64b3a 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 +#include #include #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 77eb4dbfa7b..6bc20e2e0fb 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 +#include #include #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 2caef7c8c72..6711b4e66cc 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 \