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

Reply via email to