These functions return pointer to global variables with same name but without the first leading underscore. These functions are available also under name with leading "__p" prefix.
Functions __daylight(), __dstbias(), __timezone() and __tzname() are available in msvcr80+ libraries and also in UCRT. Functions __daylight(), __dstbias() are also available in later versions of i386 and x64 msvcrt.dll and are available in all ARM versions of msvcrt.dll. Functions __p__daylight(), __p__timezone() and __p__tzname() are available since msvcrt20.dll and are present in all later msvcrt versions except the UCRT and non-i386 OS system version of msvcrt.dll. Function __p__dstbias() is available since msvcrt40.dll and is present also in all later msvcrt versions except the UCRT and non-i386 OS system version of msvcrt.dll. Global variables _daylight, _timezone and _tzname are available in all msvcrt versions except UCRT. Global variable _dstbias is present since msvcrt40.dll, except UCRT and non-i386 OS system versions of msvcrt.dll. Define __daylight, __dstbias, __timezone and __tzname for all CRT import libraries either as aliases to __p__daylight, __p__dstbias, __p__timezone, and __p__tzname or as function wrappers around variables _daylight, _dstbias, _timezone and _tzname, based on what each DLL library provides. With this change also unifies time.h file to define _daylight, _dstbias, _timezone and _tzname for all CRT builds via functions. This removes another ifdef _UCRT and improves ABI compatibility between UCRT and non-UCRT builds. --- mingw-w64-crt/Makefile.am | 14 ++++++++++++++ mingw-w64-crt/def-include/crt-aliases.def.in | 13 +++++++++++++ mingw-w64-crt/lib-common/msvcrt.def.in | 13 +++++++------ mingw-w64-crt/lib32/msvcr40d.def.in | 1 + mingw-w64-crt/lib32/msvcr70.def.in | 1 + mingw-w64-crt/lib32/msvcr70d.def.in | 1 + mingw-w64-crt/lib32/msvcr71.def.in | 1 + mingw-w64-crt/lib32/msvcr71d.def.in | 1 + mingw-w64-crt/lib32/msvcrt20.def.in | 2 ++ mingw-w64-crt/lib32/msvcrt40.def.in | 1 + mingw-w64-crt/lib32/msvcrtd.def.in | 1 + mingw-w64-crt/misc/__daylight.c | 19 +++++++++++++++++++ mingw-w64-crt/misc/__dstbias.c | 19 +++++++++++++++++++ mingw-w64-crt/misc/__timezone.c | 19 +++++++++++++++++++ mingw-w64-crt/misc/__tzname.c | 19 +++++++++++++++++++ mingw-w64-headers/crt/time.h | 7 ------- 16 files changed, 119 insertions(+), 13 deletions(-) create mode 100644 mingw-w64-crt/misc/__daylight.c create mode 100644 mingw-w64-crt/misc/__dstbias.c create mode 100644 mingw-w64-crt/misc/__timezone.c create mode 100644 mingw-w64-crt/misc/__tzname.c diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index a3b74c36073f..b253de84e9af 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am @@ -485,6 +485,8 @@ src_msvcrt32=\ src_msvcrt64=\ $(src_msvcrt) \ $(src_msvcrt_add_x86) \ + misc/__daylight.c \ + misc/__dstbias.c \ misc/__p___argc.c \ misc/__p___argv.c \ misc/__p___wargv.c \ @@ -508,6 +510,8 @@ src_msvcrt64=\ misc/__p__winminor.c \ misc/__p__winver.c \ misc/__p__wpgmptr.c \ + misc/__timezone.c \ + misc/__tzname.c \ misc/_create_locale.c \ misc/_free_locale.c \ misc/_get_current_locale.c \ @@ -546,6 +550,8 @@ src_msvcrtarm32=\ misc/__p__winminor.c \ misc/__p__winver.c \ misc/__p__wpgmptr.c \ + misc/__timezone.c \ + misc/__tzname.c \ misc/_getpid.c \ misc/__initenv.c \ misc/__winitenv.c \ @@ -661,6 +667,8 @@ src_msvcrtarm64=\ misc/__p__winminor.c \ misc/__p__winver.c \ misc/__p__wpgmptr.c \ + misc/__timezone.c \ + misc/__tzname.c \ misc/_getpid.c \ misc/__initenv.c \ misc/__winitenv.c \ @@ -675,6 +683,7 @@ src_crtdll=\ math/x86/_copysignf.c \ misc/___mb_cur_max_func.c \ misc/__badioinfo.c \ + misc/__daylight.c \ misc/__initenv.c \ misc/__p___argc.c \ misc/__p___argv.c \ @@ -698,6 +707,8 @@ src_crtdll=\ misc/__set_app_type.c \ misc/__sys_errlist.c \ misc/__sys_nerr.c \ + misc/__timezone.c \ + misc/__tzname.c \ misc/_configthreadlocale.c \ misc/dummy__setusermatherr.c \ misc/imaxabs.c \ @@ -738,6 +749,7 @@ src_msvcrt10=\ misc/msvcrt10__ismbblead.c \ misc/___mb_cur_max_func.c \ misc/__badioinfo.c \ + misc/__daylight.c \ misc/__initenv.c \ misc/__p___argc.c \ misc/__p___argv.c \ @@ -760,6 +772,8 @@ src_msvcrt10=\ misc/__set_app_type.c \ misc/__sys_errlist.c \ misc/__sys_nerr.c \ + misc/__timezone.c \ + misc/__tzname.c \ misc/_configthreadlocale.c \ misc/btowc.c \ misc/dummy__setusermatherr.c \ diff --git a/mingw-w64-crt/def-include/crt-aliases.def.in b/mingw-w64-crt/def-include/crt-aliases.def.in index aa331fcda34b..7c7b197182f4 100644 --- a/mingw-w64-crt/def-include/crt-aliases.def.in +++ b/mingw-w64-crt/def-include/crt-aliases.def.in @@ -291,6 +291,15 @@ _strcmpi == _stricmp __iob_func == __p__iob #endif +#ifdef WITH_TZ_ALIASES +__daylight == __p__daylight +#ifndef NO_DSTBIAS +__dstbias == __p__dstbias +#endif +__timezone == __p__timezone +__tzname == __p__tzname +#endif + #ifdef WITH_ATOLL_ALIAS atoll == _atoi64 _wtoll == _wtoi64 @@ -496,6 +505,10 @@ F64(_wutime == _wutime64) #ifdef UCRTBASE __lconv_init == __initialize_lconv_for_unsigned_char __set_app_type == _set_app_type +__p__daylight == __daylight +__p__dstbias == __dstbias +__p__timezone == __timezone +__p__tzname == __tzname #endif ; This is list of printf/scanf symbol aliases with __ms_ prefix diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in b/mingw-w64-crt/lib-common/msvcrt.def.in index 540121a98cd3..091a3e114731 100644 --- a/mingw-w64-crt/lib-common/msvcrt.def.in +++ b/mingw-w64-crt/lib-common/msvcrt.def.in @@ -477,8 +477,8 @@ F_I386(__p___winitenv) ; x64, arm32 and arm64 __p___winitenv provided by emu F_I386(__p__acmdln) ; x64, arm32 and arm64 __p__acmdln provided by emu F_I386(__p__amblksiz) F_I386(__p__commode) ; x64, arm32 and arm64 __p__commode provided by emu -F_I386(__p__daylight) -F_I386(__p__dstbias) +F_NON_X64(__p__daylight F_NON_I386(== __daylight)) ; arm32 and arm64 __p__daylight provided by alias and x64 __p__daylight provided by emu +F_NON_X64(__p__dstbias F_NON_I386(== __dstbias)) ; arm32 and arm64 __p__dstbias provided by alias and x64 __p__dstbias provided by emu F_I386(__p__environ) ; x64 __p__environ provided by emu F_I386(__p__fileinfo) F_I386(__p__fmode) ; x64, arm32 and arm64 __p__fmode provided by emu @@ -488,8 +488,8 @@ F_I386(__p__osver) ; x64, arm32 and arm64 __p__osver provided by emu F_I386(__p__pctype) ; x64, arm32 and arm64 __p__pctype provided by emu F_I386(__p__pgmptr) ; x64, arm32 and arm64 __p__pgmptr provided by emu F_I386(__p__pwctype) ; x64, arm32 and arm64 __p__pwctype provided by emu -F_I386(__p__timezone) -F_I386(__p__tzname) +F_I386(__p__timezone) ; x64, arm32 and arm64 __p__timezone provided by emu +F_I386(__p__tzname) ; x64, arm32 and arm64 __p__tzname provided by emu F_I386(__p__wcmdln) ; x64, arm32 and arm64 __p__wcmdln provided by emu F_I386(__p__wenviron) ; x64 __p__wenviron provided by emu F_I386(__p__winmajor) ; x64, arm32 and arm64 __p__winmajor provided by emu @@ -1324,8 +1324,8 @@ _CrtSetReportHook2 _CrtSetReportMode F_I386(__CxxCallUnwindDelDtor) __CxxFrameHandler3 -__daylight -__dstbias +F_ARM_ANY(__daylight) ; i386 __daylight replaced by alias and x64 __daylight replaced by emu +F_ARM_ANY(__dstbias) ; i386 __dstbias replaced by alias and x64 __dstbias replaced by emu F_I386(__libm_sse2_acos) F_I386(__libm_sse2_acosf) F_I386(__libm_sse2_asin) @@ -1912,6 +1912,7 @@ F_I386(_libm_sse2_tan_precise) #ifdef DEF_I386 ; i386 __iob_func replaced by alias #define WITH_IOB_FUNC_ALIAS +#define WITH_TZ_ALIASES #endif #define WITH_ATOLL_ALIAS #define WITH_ATOLL_L_ALIAS diff --git a/mingw-w64-crt/lib32/msvcr40d.def.in b/mingw-w64-crt/lib32/msvcr40d.def.in index f1f8dc89896a..89d1bfdbd733 100644 --- a/mingw-w64-crt/lib32/msvcr40d.def.in +++ b/mingw-w64-crt/lib32/msvcr40d.def.in @@ -1700,4 +1700,5 @@ _dstbias DATA #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS #define WITH_IOB_FUNC_ALIAS +#define WITH_TZ_ALIASES #include "crt-aliases.def.in" diff --git a/mingw-w64-crt/lib32/msvcr70.def.in b/mingw-w64-crt/lib32/msvcr70.def.in index e83feb97e0ae..6f907eb85b9f 100644 --- a/mingw-w64-crt/lib32/msvcr70.def.in +++ b/mingw-w64-crt/lib32/msvcr70.def.in @@ -904,6 +904,7 @@ wscanf #define FIXED_SIZE_SYMBOLS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS +#define WITH_TZ_ALIASES #define WITH_ATOLL_ALIAS #define WITH_STRTO64_ALIAS #include "crt-aliases.def.in" diff --git a/mingw-w64-crt/lib32/msvcr70d.def.in b/mingw-w64-crt/lib32/msvcr70d.def.in index 54ac8c477eab..8ffdc9ed0bcf 100644 --- a/mingw-w64-crt/lib32/msvcr70d.def.in +++ b/mingw-w64-crt/lib32/msvcr70d.def.in @@ -948,6 +948,7 @@ wscanf #define FIXED_SIZE_SYMBOLS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS +#define WITH_TZ_ALIASES #define WITH_ATOLL_ALIAS #define WITH_STRTO64_ALIAS #include "crt-aliases.def.in" diff --git a/mingw-w64-crt/lib32/msvcr71.def.in b/mingw-w64-crt/lib32/msvcr71.def.in index b068a7305892..985ff6b75283 100644 --- a/mingw-w64-crt/lib32/msvcr71.def.in +++ b/mingw-w64-crt/lib32/msvcr71.def.in @@ -898,6 +898,7 @@ wscanf #define FIXED_SIZE_SYMBOLS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS +#define WITH_TZ_ALIASES #define WITH_ATOLL_ALIAS #define WITH_STRTO64_ALIAS #include "crt-aliases.def.in" diff --git a/mingw-w64-crt/lib32/msvcr71d.def.in b/mingw-w64-crt/lib32/msvcr71d.def.in index 71cfeafd8071..c8b9c426ef7f 100644 --- a/mingw-w64-crt/lib32/msvcr71d.def.in +++ b/mingw-w64-crt/lib32/msvcr71d.def.in @@ -942,6 +942,7 @@ wscanf #define FIXED_SIZE_SYMBOLS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS +#define WITH_TZ_ALIASES #define WITH_ATOLL_ALIAS #define WITH_STRTO64_ALIAS #include "crt-aliases.def.in" diff --git a/mingw-w64-crt/lib32/msvcrt20.def.in b/mingw-w64-crt/lib32/msvcrt20.def.in index 13d09770c82d..11e3c30bb11a 100644 --- a/mingw-w64-crt/lib32/msvcrt20.def.in +++ b/mingw-w64-crt/lib32/msvcrt20.def.in @@ -1581,6 +1581,8 @@ _safe_fprem1 #define NO_I64_FIXED_SIZE #define NO_FPOS64_ALIASES #define NO_STRCMPI_ALIAS +#define NO_DSTBIAS #define WITH_NEXTAFTER_ALIAS #define WITH_IOB_FUNC_ALIAS +#define WITH_TZ_ALIASES #include "crt-aliases.def.in" diff --git a/mingw-w64-crt/lib32/msvcrt40.def.in b/mingw-w64-crt/lib32/msvcrt40.def.in index f1e0eee39a98..022f912b8209 100644 --- a/mingw-w64-crt/lib32/msvcrt40.def.in +++ b/mingw-w64-crt/lib32/msvcrt40.def.in @@ -1665,4 +1665,5 @@ _dstbias DATA #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS #define WITH_IOB_FUNC_ALIAS +#define WITH_TZ_ALIASES #include "crt-aliases.def.in" diff --git a/mingw-w64-crt/lib32/msvcrtd.def.in b/mingw-w64-crt/lib32/msvcrtd.def.in index 82fed70ee7e7..12fe811178b8 100644 --- a/mingw-w64-crt/lib32/msvcrtd.def.in +++ b/mingw-w64-crt/lib32/msvcrtd.def.in @@ -860,6 +860,7 @@ _chkesp #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS #define WITH_IOB_FUNC_ALIAS +#define WITH_TZ_ALIASES #define WITH_ATOLL_ALIAS #define WITH_ATOLL_L_ALIAS #define WITH_STRTO64_L_ALIAS diff --git a/mingw-w64-crt/misc/__daylight.c b/mingw-w64-crt/misc/__daylight.c new file mode 100644 index 000000000000..0fc29e499908 --- /dev/null +++ b/mingw-w64-crt/misc/__daylight.c @@ -0,0 +1,19 @@ +/** + * 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 <_mingw.h> + +extern int* __MINGW_IMP_SYMBOL(_daylight); + +int* __cdecl __daylight(void); +int* __cdecl __daylight(void) +{ + return __MINGW_IMP_SYMBOL(_daylight); +} +int* (__cdecl *__MINGW_IMP_SYMBOL(__daylight))(void) = __daylight; + +int* __attribute__ ((alias ("__daylight"))) __cdecl __p__daylight(void); +extern int* (__cdecl * __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(__daylight))))) __MINGW_IMP_SYMBOL(__p__daylight))(void); diff --git a/mingw-w64-crt/misc/__dstbias.c b/mingw-w64-crt/misc/__dstbias.c new file mode 100644 index 000000000000..525ddd048e22 --- /dev/null +++ b/mingw-w64-crt/misc/__dstbias.c @@ -0,0 +1,19 @@ +/** + * 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 <_mingw.h> + +extern long* __MINGW_IMP_SYMBOL(_dstbias); + +long* __cdecl __dstbias(void); +long* __cdecl __dstbias(void) +{ + return __MINGW_IMP_SYMBOL(_dstbias); +} +long* (__cdecl *__MINGW_IMP_SYMBOL(__dstbias))(void) = __dstbias; + +long* __attribute__ ((alias ("__dstbias"))) __cdecl __p__dstbias(void); +extern long* (__cdecl * __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(__dstbias))))) __MINGW_IMP_SYMBOL(__p__dstbias))(void); diff --git a/mingw-w64-crt/misc/__timezone.c b/mingw-w64-crt/misc/__timezone.c new file mode 100644 index 000000000000..8009a1cd15df --- /dev/null +++ b/mingw-w64-crt/misc/__timezone.c @@ -0,0 +1,19 @@ +/** + * 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 <_mingw.h> + +extern long* __MINGW_IMP_SYMBOL(_timezone); + +long* __cdecl __timezone(void); +long* __cdecl __timezone(void) +{ + return __MINGW_IMP_SYMBOL(_timezone); +} +long* (__cdecl *__MINGW_IMP_SYMBOL(__timezone))(void) = __timezone; + +long* __attribute__ ((alias ("__timezone"))) __cdecl __p__timezone(void); +extern long* (__cdecl * __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(__timezone))))) __MINGW_IMP_SYMBOL(__p__timezone))(void); diff --git a/mingw-w64-crt/misc/__tzname.c b/mingw-w64-crt/misc/__tzname.c new file mode 100644 index 000000000000..403433b92e0f --- /dev/null +++ b/mingw-w64-crt/misc/__tzname.c @@ -0,0 +1,19 @@ +/** + * 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 <_mingw.h> + +extern char** __MINGW_IMP_SYMBOL(_tzname); + +char** __cdecl __tzname(void); +char** __cdecl __tzname(void) +{ + return __MINGW_IMP_SYMBOL(_tzname); +} +char** (__cdecl *__MINGW_IMP_SYMBOL(__tzname))(void) = __tzname; + +char** __attribute__ ((alias ("__tzname"))) __cdecl __p__tzname(void); +extern char** (__cdecl * __attribute__ ((alias (__MINGW64_STRINGIFY(__MINGW_IMP_SYMBOL(__tzname))))) __MINGW_IMP_SYMBOL(__p__tzname))(void); diff --git a/mingw-w64-headers/crt/time.h b/mingw-w64-headers/crt/time.h index 8f324e086529..2a475eeff944 100644 --- a/mingw-w64-headers/crt/time.h +++ b/mingw-w64-headers/crt/time.h @@ -116,7 +116,6 @@ extern "C" { #define TIME_UTC 1 #endif -#ifdef _UCRT _CRTIMP int *__cdecl __daylight(void); _CRTIMP long *__cdecl __dstbias(void); _CRTIMP long *__cdecl __timezone(void); @@ -125,12 +124,6 @@ extern "C" { #define _dstbias (* __dstbias()) #define _timezone (* __timezone()) #define _tzname (__tzname()) -#else - __MINGW_IMPORT int _daylight; - __MINGW_IMPORT long _dstbias; - __MINGW_IMPORT long _timezone; - __MINGW_IMPORT char * _tzname[2]; -#endif #undef __MINGW_STRFTIME_FORMAT -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public