X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..b7e5ba8f2d676583c790c59388eba8bfa9bd33c2:/include/wx/datetime.h diff --git a/include/wx/datetime.h b/include/wx/datetime.h index d1172a10e5..962d0396b3 100644 --- a/include/wx/datetime.h +++ b/include/wx/datetime.h @@ -52,6 +52,27 @@ class WXDLLIMPEXP_BASE wxDateSpan; * 5. wxDateTimeHolidayAuthority for Easter and other christian feasts */ +/* Two wrapper functions for thread safety */ +#ifdef HAVE_LOCALTIME_R +#define wxLocaltime_r localtime_r +#else +struct tm *wxLocaltime_r(const time_t*, struct tm*); +#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__) + // On Windows, localtime _is_ threadsafe! +#warning using pseudo thread-safe wrapper for localtime to emulate localtime_r +#endif +#endif + +#ifdef HAVE_GMTIME_R +#define wxGmtime_r gmtime_r +#else +struct tm *wxGmtime_r(const time_t*, struct tm*); +#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__) + // On Windows, gmtime _is_ threadsafe! +#warning using pseudo thread-safe wrapper for gmtime to emulate gmtime_r +#endif +#endif + /* The three (main) classes declared in this header represent: @@ -769,12 +790,10 @@ public: inline wxDateTime ToTimezone(const TimeZone& tz, bool noDST = false) const; wxDateTime& MakeTimezone(const TimeZone& tz, bool noDST = false); -#if wxABI_VERSION >= 20602 // interpret current value as being in another timezone and transform // it to local one inline wxDateTime FromTimezone(const TimeZone& tz, bool noDST = false) const; wxDateTime& MakeFromTimezone(const TimeZone& tz, bool noDST = false); -#endif // ABI >= 2.6.2 // transform to/from GMT/UTC wxDateTime ToUTC(bool noDST = false) const { return ToTimezone(UTC, noDST); } @@ -783,12 +802,10 @@ public: wxDateTime ToGMT(bool noDST = false) const { return ToUTC(noDST); } wxDateTime& MakeGMT(bool noDST = false) { return MakeUTC(noDST); } -#if wxABI_VERSION >= 20602 wxDateTime FromUTC(bool noDST = false) const { return FromTimezone(UTC, noDST); } wxDateTime& MakeFromUTC(bool noDST = false) { return MakeFromTimezone(UTC, noDST); } -#endif // ABI >= 2.6.2 // is daylight savings time in effect at this moment according to the // rules of the specified country? @@ -1059,6 +1076,9 @@ public: return localtime(&t); } + // get current time using thread-safe function + static struct tm *GetTmNow(struct tm *tmstruct); + private: // the current country - as it's the same for all program objects (unless // it runs on a _really_ big cluster system :-), this is a static member: @@ -1541,7 +1561,8 @@ inline bool wxDateTime::IsInStdRange() const /* static */ inline wxDateTime wxDateTime::Now() { - return wxDateTime(*GetTmNow()); + struct tm tmstruct; + return wxDateTime(*GetTmNow(&tmstruct)); } /* static */ @@ -1858,16 +1879,12 @@ wxDateTime::ToTimezone(const wxDateTime::TimeZone& tz, bool noDST) const MODIFY_AND_RETURN( MakeTimezone(tz, noDST) ); } -#if wxABI_VERSION >= 20602 - inline wxDateTime wxDateTime::FromTimezone(const wxDateTime::TimeZone& tz, bool noDST) const { MODIFY_AND_RETURN( MakeFromTimezone(tz, noDST) ); } -#endif // ABI >= 2.6.2 - // ---------------------------------------------------------------------------- // wxTimeSpan construction // ----------------------------------------------------------------------------