Fix cut-to-width in the presence of bad constants in dead code.
[sbcl.git] / src / runtime / time.c
index b980ba1..7b4b167 100644 (file)
 #include "sbcl.h"
 #include "runtime.h"
 
+#ifdef LISP_FEATURE_HPUX
+struct tm *gmtime_r(const time_t *timer, struct tm *result);
+struct tm *localtime_r(const time_t *timer, struct tm *result);
+#endif
+
 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, &ltm);
+    gtm = *gmtime_r(&when, &gtm);
+#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)