summaryrefslogtreecommitdiffstats
path: root/win/tclWinTime.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-09-07 13:58:51 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-09-07 13:58:51 (GMT)
commitc92b03f0a41ea3598cc2953a87c251fac504bf7a (patch)
treecef35ca5d056f667b726c878bfa4c2a6e2eba470 /win/tclWinTime.c
parent5ea46c24a2d2e32cd25e06728a7b81f3a949f5a8 (diff)
parent2b93599ffd06e74e9e904fbafd83196839390119 (diff)
downloadtcl-c92b03f0a41ea3598cc2953a87c251fac504bf7a.zip
tcl-c92b03f0a41ea3598cc2953a87c251fac504bf7a.tar.gz
tcl-c92b03f0a41ea3598cc2953a87c251fac504bf7a.tar.bz2
Don't let Tcl compilation depend on USE_32BIT_TIME_T any more: Microsoft could discontinue this macro any moment, then we are prepared ....
As a bonus: time_t is now allowed to be 64-bit internally, without effect on the C API (like stub-enabled extensions)
Diffstat (limited to 'win/tclWinTime.c')
-rw-r--r--win/tclWinTime.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/win/tclWinTime.c b/win/tclWinTime.c
index 42fd99f..7de0941 100644
--- a/win/tclWinTime.c
+++ b/win/tclWinTime.c
@@ -729,6 +729,11 @@ TclpGetDate(
{
struct tm *tmPtr;
time_t time;
+#if defined(_WIN64) || (defined(_USE_64BIT_TIME_T) || (defined(_MSC_VER) && _MSC_VER < 1400))
+# define t2 *t /* no need to cripple time to 32-bit */
+#else
+ time_t t2 = *(__time32_t *)t;
+#endif
if (!useGMT) {
#if defined(_MSC_VER) && (_MSC_VER >= 1900)
@@ -761,15 +766,15 @@ TclpGetDate(
#define LOCALTIME_VALIDITY_BOUNDARY 0
#endif
- if (*t >= LOCALTIME_VALIDITY_BOUNDARY) {
- return TclpLocaltime(t);
+ if (t2 >= LOCALTIME_VALIDITY_BOUNDARY) {
+ return TclpLocaltime(&t2);
}
#if defined(_MSC_VER) && (_MSC_VER >= 1900)
_get_timezone(&timezone);
#endif
- time = *t - timezone;
+ time = t2 - timezone;
/*
* If we aren't near to overflowing the long, just add the bias and
@@ -777,10 +782,10 @@ TclpGetDate(
* result at the end.
*/
- if (*t < (LONG_MAX - 2*SECSPERDAY) && *t > (LONG_MIN + 2*SECSPERDAY)) {
+ if (t2 < (LONG_MAX - 2*SECSPERDAY) && t2 > (LONG_MIN + 2*SECSPERDAY)) {
tmPtr = ComputeGMT(&time);
} else {
- tmPtr = ComputeGMT(t);
+ tmPtr = ComputeGMT(&t2);
tzset();
@@ -816,7 +821,7 @@ TclpGetDate(
tmPtr->tm_wday = (tmPtr->tm_wday + (int)time) % 7;
}
} else {
- tmPtr = ComputeGMT(t);
+ tmPtr = ComputeGMT(&t2);
}
return tmPtr;
}
@@ -1350,7 +1355,11 @@ TclpGmtime(
* Posix gmtime_r function.
*/
+#if defined(_WIN64) || defined(_USE_64BIT_TIME_T) || (defined(_MSC_VER) && _MSC_VER < 1400)
return gmtime(timePtr);
+#else
+ return _gmtime32((CONST __time32_t *)timePtr);
+#endif
}
/*
@@ -1381,7 +1390,11 @@ TclpLocaltime(
* provide a Posix localtime_r function.
*/
+#if defined(_WIN64) || defined(_USE_64BIT_TIME_T) || (defined(_MSC_VER) && _MSC_VER < 1400)
return localtime(timePtr);
+#else
+ return _localtime32((CONST __time32_t *)timePtr);
+#endif
}
/*