summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authorKevin B Kenny <kennykb@acm.org>2004-05-14 21:43:28 (GMT)
committerKevin B Kenny <kennykb@acm.org>2004-05-14 21:43:28 (GMT)
commitd3dd7920cd97f2c402d6fdc5c4acdb3e60c8f9cb (patch)
tree1bd25818dd481cc051c619d9993b650758201a89 /win
parenta87aa8a1be2c89d9174660ca97ea533474e73901 (diff)
downloadtcl-d3dd7920cd97f2c402d6fdc5c4acdb3e60c8f9cb.zip
tcl-d3dd7920cd97f2c402d6fdc5c4acdb3e60c8f9cb.tar.gz
tcl-d3dd7920cd97f2c402d6fdc5c4acdb3e60c8f9cb.tar.bz2
2004-05-14 Kevin B. Kenny <kennykb@acm.org>
* generic/tclInt.decls: Promoted TclpLocaltime and TclpGmtime * generic/tclIntDecls.h: from Unix-specific stubs to the generic * generic/tclIntPlatDecls.h: internal Stubs table. Reran 'genstubs' * generic/tclStubInit.c: * unix/tclUnixPort.h: * generic/tclClock.c: Changed a buggy 'GMT' timezone specification to the correct 'GMT0'. [Bug #922848] * unix/tclUnixThrd.c: Moved TclpGmtime and TclpLocaltime to unix/tclUnixTime.c where they belong. * unix/tclUnixTime.c (TclpGmtime, TclpLocaltime, TclpGetTimeZone, ThreadSafeGMTime [removed], ThreadSafeLocalTime [removed], SetTZIfNecessary, CleanupMemory): Restructured to make sure that the same mutex protects all calls to localtime, gmtime, and tzset. Added a check in front of those calls to make sure that the TZ env var hasn't changed since the last call to tzset, and repeat tzset if necessary. [Bug #942078] Removed a buggy test of the Daylight Saving Time information in 'gettimeofday' in favor of applying 'localtime' to a known value. [Bug #922848] * tests/clock.test (clock-3.14): Added test to make sure that changes to $env(TZ) take effect immediately. * win/tclWinTime.c (TclpLocaltime, TclpGmtime): Added porting layer for 'localtime' and 'gmtime' calls.
Diffstat (limited to 'win')
-rw-r--r--win/tclWinTime.c66
1 files changed, 64 insertions, 2 deletions
diff --git a/win/tclWinTime.c b/win/tclWinTime.c
index 2c10978..38523b2 100644
--- a/win/tclWinTime.c
+++ b/win/tclWinTime.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclWinTime.c,v 1.25 2004/04/23 07:12:08 davygrvy Exp $
+ * RCS: @(#) $Id: tclWinTime.c,v 1.26 2004/05/14 21:43:29 kennykb Exp $
*/
#include "tclInt.h"
@@ -578,7 +578,7 @@ TclpGetDate(t, useGMT)
#else
if (*t >= 0) {
#endif
- return localtime(t);
+ return TclpLocaltime(t);
}
time = *t - timezone;
@@ -1084,3 +1084,65 @@ AccumulateSample( Tcl_WideInt perfCounter,
return estFreq;
}
}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclpGmtime --
+ *
+ * Wrapper around the 'gmtime' library function to make it thread
+ * safe.
+ *
+ * Results:
+ * Returns a pointer to a 'struct tm' in thread-specific data.
+ *
+ * Side effects:
+ * Invokes gmtime or gmtime_r as appropriate.
+ *
+ *----------------------------------------------------------------------
+ */
+
+struct tm *
+TclpGmtime( timePtr )
+ CONST time_t *timePtr; /* Pointer to the number of seconds
+ * since the local system's epoch */
+
+{
+ /*
+ * The MS implementation of gmtime is thread safe because
+ * it returns the time in a block of thread-local storage,
+ * and Windows does not provide a Posix gmtime_r function.
+ */
+ return gmtime( timePtr );
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclpLocaltime --
+ *
+ * Wrapper around the 'localtime' library function to make it thread
+ * safe.
+ *
+ * Results:
+ * Returns a pointer to a 'struct tm' in thread-specific data.
+ *
+ * Side effects:
+ * Invokes localtime or localtime_r as appropriate.
+ *
+ *----------------------------------------------------------------------
+ */
+
+struct tm *
+TclpLocaltime( timePtr )
+ CONST time_t *timePtr; /* Pointer to the number of seconds
+ * since the local system's epoch */
+
+{
+ /*
+ * The MS implementation of localtime is thread safe because
+ * it returns the time in a block of thread-local storage,
+ * and Windows does not provide a Posix localtime_r function.
+ */
+ return localtime( timePtr );
+}