_osver, _winmajor, _winminor and _winver are exported from CRT DLL library up to the msvcr80.dll version. Add support for __p_ functions also for msvcr90+ and UCRT import libraries. --- mingw-w64-crt/Makefile.am | 27 +++++++--- mingw-w64-crt/lib-common/msvcr120.mri | 1 + mingw-w64-crt/lib-common/msvcr120_app.mri | 1 + mingw-w64-crt/lib-common/msvcr120d.mri | 1 + mingw-w64-crt/misc/__p__osver_emul.c | 62 +++++++++++++++++++++++ 5 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 mingw-w64-crt/misc/__p__osver_emul.c
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index 877d1447af4e..a3a497f2e965 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am @@ -361,6 +361,7 @@ src_ucrtbase=\ misc/__badioinfo.c \ misc/__p___initenv.c \ misc/__p___winitenv.c \ + misc/__p__osver_emul.c \ misc/__initenv.c \ misc/__winitenv.c \ misc/_onexit.c \ @@ -933,6 +934,7 @@ src_msvcr80=\ misc/wctype.c src_msvcr90=\ + misc/__p__osver_emul.c \ misc/imaxdiv.c \ misc/isblank.c \ misc/iswblank.c \ @@ -940,17 +942,22 @@ src_msvcr90=\ misc/wctype.c src_msvcr100=\ + misc/__p__osver_emul.c \ misc/isblank.c \ misc/iswblank.c \ misc/wctrans.c \ misc/wctype.c src_msvcr110=\ + misc/__p__osver_emul.c \ misc/isblank.c \ misc/iswblank.c \ misc/wctrans.c \ misc/wctype.c +src_msvcr120=\ + misc/__p__osver_emul.c + src_msvcr120_app=\ misc/__p___initenv.c \ misc/__p___winitenv.c \ @@ -1480,15 +1487,15 @@ lib32/libmsvcr110d.a: lib-common/msvcr110d.mri lib32/libmsvcr110d_def.a lib32/li cd $(dir $@) && $(AR) -M < $(abspath $<) lib32_DATA += lib32/libmsvcr120.a -lib32/libmsvcr120.a: lib-common/msvcr120.mri lib32/libmsvcr120_def.a lib32/libmsvcrt_common.a +lib32/libmsvcr120.a: lib-common/msvcr120.mri lib32/libmsvcr120_def.a lib32/libmsvcrt_common.a lib32/libmsvcr120_extra.a cd $(dir $@) && $(AR) -M < $(abspath $<) lib32_DATA += lib32/libmsvcr120d.a -lib32/libmsvcr120d.a: lib-common/msvcr120d.mri lib32/libmsvcr120d_def.a lib32/libmsvcrt_common.a +lib32/libmsvcr120d.a: lib-common/msvcr120d.mri lib32/libmsvcr120d_def.a lib32/libmsvcrt_common.a lib32/libmsvcr120_extra.a cd $(dir $@) && $(AR) -M < $(abspath $<) lib32_DATA += lib32/libmsvcr120_app.a -lib32/libmsvcr120_app.a: lib-common/msvcr120_app.mri lib32/libmsvcr120_app_def.a lib32/libmsvcrt_common.a lib32/libmsvcr120_app_extra.a +lib32/libmsvcr120_app.a: lib-common/msvcr120_app.mri lib32/libmsvcr120_app_def.a lib32/libmsvcrt_common.a lib32/libmsvcr120_extra.a lib32/libmsvcr120_app_extra.a cd $(dir $@) && $(AR) -M < $(abspath $<) lib32_DATA += lib32/libucrtbase.a @@ -1500,7 +1507,7 @@ lib32/libucrtbased.a: lib-common/ucrtbased.mri lib32/libucrtbased_def.a lib32/li cd $(dir $@) && $(AR) -M < $(abspath $<) lib32_DATA += lib32/libucrt.a lib32/libucrtapp.a -noinst_LIBRARIES += lib32/libcrtdll_extra.a lib32/libmsvcrt10_extra.a lib32/libmsvcrt20_extra.a lib32/libmsvcrt40_extra.a lib32/libmsvcrt_common.a lib32/libmsvcrt_extra.a lib32/libmsvcr70_extra.a lib32/libmsvcr71_extra.a lib32/libmsvcr80_extra.a lib32/libmsvcr90_extra.a lib32/libmsvcr100_extra.a lib32/libmsvcr110_extra.a lib32/libmsvcr120_app_extra.a lib32/libucrt_extra.a lib32/libucrtapp_extra.a +noinst_LIBRARIES += lib32/libcrtdll_extra.a lib32/libmsvcrt10_extra.a lib32/libmsvcrt20_extra.a lib32/libmsvcrt40_extra.a lib32/libmsvcrt_common.a lib32/libmsvcrt_extra.a lib32/libmsvcr70_extra.a lib32/libmsvcr71_extra.a lib32/libmsvcr80_extra.a lib32/libmsvcr90_extra.a lib32/libmsvcr100_extra.a lib32/libmsvcr110_extra.a lib32/libmsvcr120_extra.a lib32/libmsvcr120_app_extra.a lib32/libucrt_extra.a lib32/libucrtapp_extra.a lib32_libcrtdll_extra_a_SOURCES = $(src_crtdll) lib32_libcrtdll_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib32_libmsvcrt10_extra_a_SOURCES = $(src_msvcrt10) @@ -1525,6 +1532,8 @@ lib32_libmsvcr100_extra_a_SOURCES = $(src_msvcr100) lib32_libmsvcr100_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib32_libmsvcr110_extra_a_SOURCES = $(src_msvcr110) lib32_libmsvcr110_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) +lib32_libmsvcr120_extra_a_SOURCES = $(src_msvcr120) +lib32_libmsvcr120_extra_a_CPPFLAGS = $(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib32_libmsvcr120_app_extra_a_SOURCES = $(src_msvcr120_app) lib32_libmsvcr120_app_extra_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib32_libucrt_extra_a_SOURCES = $(src_ucrtbase32) @@ -1855,15 +1864,15 @@ lib64/libmsvcr110d.a: lib-common/msvcr110d.mri lib64/libmsvcr110d_def.a lib64/li cd $(dir $@) && $(AR) -M < $(abspath $<) lib64_DATA += lib64/libmsvcr120.a -lib64/libmsvcr120.a: lib-common/msvcr120.mri lib64/libmsvcr120_def.a lib64/libmsvcrt_common.a +lib64/libmsvcr120.a: lib-common/msvcr120.mri lib64/libmsvcr120_def.a lib64/libmsvcrt_common.a lib64/libmsvcr120_extra.a cd $(dir $@) && $(AR) -M < $(abspath $<) lib64_DATA += lib64/libmsvcr120d.a -lib64/libmsvcr120d.a: lib-common/msvcr120d.mri lib64/libmsvcr120d_def.a lib64/libmsvcrt_common.a +lib64/libmsvcr120d.a: lib-common/msvcr120d.mri lib64/libmsvcr120d_def.a lib64/libmsvcrt_common.a lib64/libmsvcr120_extra.a cd $(dir $@) && $(AR) -M < $(abspath $<) lib64_DATA += lib64/libmsvcr120_app.a -lib64/libmsvcr120_app.a: lib-common/msvcr120_app.mri lib64/libmsvcr120_app_def.a lib64/libmsvcrt_common.a lib64/libmsvcr120_app_extra.a +lib64/libmsvcr120_app.a: lib-common/msvcr120_app.mri lib64/libmsvcr120_app_def.a lib64/libmsvcrt_common.a lib64/libmsvcr120_extra.a lib64/libmsvcr120_app_extra.a cd $(dir $@) && $(AR) -M < $(abspath $<) lib64_DATA += lib64/libucrtbase.a @@ -1875,7 +1884,7 @@ lib64/libucrtbased.a: lib-common/ucrtbased.mri lib64/libucrtbased_def.a lib64/li cd $(dir $@) && $(AR) -M < $(abspath $<) lib64_DATA += lib64/libucrt.a lib64/libucrtapp.a -noinst_LIBRARIES += lib64/libmsvcrt_common.a lib64/libmsvcrt_extra.a lib64/libmsvcr80_extra.a lib64/libmsvcr90_extra.a lib64/libmsvcr100_extra.a lib64/libmsvcr110_extra.a lib64/libmsvcr120_app_extra.a lib64/libucrt_extra.a lib64/libucrtapp_extra.a +noinst_LIBRARIES += lib64/libmsvcrt_common.a lib64/libmsvcrt_extra.a lib64/libmsvcr80_extra.a lib64/libmsvcr90_extra.a lib64/libmsvcr100_extra.a lib64/libmsvcr110_extra.a lib64/libmsvcr120_extra.a lib64/libmsvcr120_app_extra.a lib64/libucrt_extra.a lib64/libucrtapp_extra.a lib64_libmsvcrt_common_a_SOURCES = $(src_msvcrt_common64) lib64_libmsvcrt_common_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib64_libmsvcrt_extra_a_SOURCES = $(src_msvcrt64) @@ -1888,6 +1897,8 @@ lib64_libmsvcr100_extra_a_SOURCES = $(src_msvcr100) lib64_libmsvcr100_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib64_libmsvcr110_extra_a_SOURCES = $(src_msvcr110) lib64_libmsvcr110_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) +lib64_libmsvcr120_extra_a_SOURCES = $(src_msvcr120) +lib64_libmsvcr120_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib64_libmsvcr120_app_extra_a_SOURCES = $(src_msvcr120_app) lib64_libmsvcr120_app_extra_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) lib64_libucrt_extra_a_SOURCES = $(src_ucrtbase64) diff --git a/mingw-w64-crt/lib-common/msvcr120.mri b/mingw-w64-crt/lib-common/msvcr120.mri index 89273be79b90..a03f7d3b6dba 100644 --- a/mingw-w64-crt/lib-common/msvcr120.mri +++ b/mingw-w64-crt/lib-common/msvcr120.mri @@ -1,5 +1,6 @@ CREATE libmsvcr120.a ADDLIB libmsvcr120_def.a ADDLIB libmsvcrt_common.a +ADDLIB libmsvcr120_extra.a SAVE END diff --git a/mingw-w64-crt/lib-common/msvcr120_app.mri b/mingw-w64-crt/lib-common/msvcr120_app.mri index c4a898cd7ce2..47e6ab618824 100644 --- a/mingw-w64-crt/lib-common/msvcr120_app.mri +++ b/mingw-w64-crt/lib-common/msvcr120_app.mri @@ -1,6 +1,7 @@ CREATE libmsvcr120_app.a ADDLIB libmsvcr120_app_def.a ADDLIB libmsvcrt_common.a +ADDLIB libmsvcr120_extra.a ADDLIB libmsvcr120_app_extra.a SAVE END diff --git a/mingw-w64-crt/lib-common/msvcr120d.mri b/mingw-w64-crt/lib-common/msvcr120d.mri index 7e0e520e52f0..cd3753c64ea7 100644 --- a/mingw-w64-crt/lib-common/msvcr120d.mri +++ b/mingw-w64-crt/lib-common/msvcr120d.mri @@ -1,5 +1,6 @@ CREATE libmsvcr120d.a ADDLIB libmsvcr120d_def.a ADDLIB libmsvcrt_common.a +ADDLIB libmsvcr120_extra.a SAVE END diff --git a/mingw-w64-crt/misc/__p__osver_emul.c b/mingw-w64-crt/misc/__p__osver_emul.c new file mode 100644 index 000000000000..61a38c85fb06 --- /dev/null +++ b/mingw-w64-crt/misc/__p__osver_emul.c @@ -0,0 +1,62 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +#include <stdlib.h> +#include <windows.h> + +#undef _osver +static unsigned int _osver; + +#undef _winmajor +static unsigned int _winmajor; + +#undef _winminor +static unsigned int _winminor; + +#undef _winver +static unsigned int _winver; + +static void init_versions(void) +{ + static int init = 0; + if (!init) + { + unsigned int version = GetVersion(); + _winmajor = version & 0xFF; + _winminor = (version >> 8) & 0xFF; + _winver = (_winmajor << 8) | _winminor; + _osver = (version >> 16) & 0xFFFF; + init = 1; + } +} + +unsigned int* __cdecl __p__osver(void) +{ + init_versions(); + return &_osver; +} +unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__osver))(void) = __p__osver; + +unsigned int* __cdecl __p__winmajor(void) +{ + init_versions(); + return &_winmajor; +} +unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__winmajor))(void) = __p__winmajor; + +unsigned int* __cdecl __p__winminor(void) +{ + init_versions(); + return &_winminor; +} +unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__winminor))(void) = __p__winminor; + +unsigned int* __cdecl __p__winver(void) +{ + init_versions(); + return &_winver; +} +unsigned int* (__cdecl *__MINGW_IMP_SYMBOL(__p__winver))(void) = __p__winver; -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public