X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Ftime.c;h=82ffab2c528e20b0d2a8e608413b606de695ce23;hb=c1aa8b6b5b870f21bc8c81da85708e9d71d4eb93;hp=b980ba15c4ffb2e4271fba49a129c5618ce991ed;hpb=79cc569a97e444389350ea3f5b1017374fe16bec;p=sbcl.git diff --git a/src/runtime/time.c b/src/runtime/time.c index b980ba1..82ffab2 100644 --- a/src/runtime/time.c +++ b/src/runtime/time.c @@ -23,8 +23,22 @@ 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. + * + * The Windows versions also don't support times before the + * epoch, so we kludge it. */ + if (when < 0) + when = 0; 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)