diff options
author | Kevin B Kenny <kennykb@acm.org> | 2004-05-14 21:43:28 (GMT) |
---|---|---|
committer | Kevin B Kenny <kennykb@acm.org> | 2004-05-14 21:43:28 (GMT) |
commit | d3dd7920cd97f2c402d6fdc5c4acdb3e60c8f9cb (patch) | |
tree | 1bd25818dd481cc051c619d9993b650758201a89 /win/tclWinTime.c | |
parent | a87aa8a1be2c89d9174660ca97ea533474e73901 (diff) | |
download | tcl-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/tclWinTime.c')
-rw-r--r-- | win/tclWinTime.c | 66 |
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 ); +} |