X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Ftime.c;h=4b4cf9c21c5a6c35cbcdbff6925b695041c40dd3;hb=b43b6e70ce48d959d77f7f56be9d11aa101fdd7d;hp=716e7d8d39ea20f3556222014209f95e1f4745cd;hpb=020de3c04699323437f0c746fe986506b716ab97;p=sbcl.git diff --git a/src/runtime/time.c b/src/runtime/time.c index 716e7d8..4b4cf9c 100644 --- a/src/runtime/time.c +++ b/src/runtime/time.c @@ -15,6 +15,7 @@ #include #include +#include "sbcl.h" #include "runtime.h" void get_timezone(time_t when, int *secwest, boolean *dst) @@ -22,14 +23,23 @@ void get_timezone(time_t when, int *secwest, boolean *dst) struct tm ltm, gtm; int sw; +#ifdef LISP_FEATURE_WIN32 + /* No _r versions on Windows, but the API documentation also + * doesn't warn them about being non-reentrant... So here's + * hoping they actually are -- once Windows grows threads + * this better be checked, though. */ ltm = *localtime(&when); gtm = *gmtime(&when); +#else + ltm = *localtime_r(&when, <m); + gtm = *gmtime_r(&when, >m); +#endif sw = (((gtm.tm_hour*60)+gtm.tm_min)*60+gtm.tm_sec) - (((ltm.tm_hour*60)+ltm.tm_min)*60+ltm.tm_sec); if ((gtm.tm_wday + 1) % 7 == ltm.tm_wday) - sw -= 24*3600; + sw -= 24*3600; else if (gtm.tm_wday == (ltm.tm_wday + 1) % 7) - sw += 24*3600; + sw += 24*3600; *secwest = sw; *dst = ltm.tm_isdst; }