]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix decode-time/encode-time roundtrip on macOS
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 30 Apr 2019 17:45:48 +0000 (10:45 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 30 Apr 2019 17:47:17 +0000 (10:47 -0700)
* src/timefns.c (Fencode_time): Ignore DST flag when the zone is
numeric or is a cons, as the doc string says it’s ignored in that
case, and not ignoring it causes encode-time to not invert
decode-time on some platforms (Bug#35502).
* test/src/timefns-tests.el (encode-time-dst-numeric-zone):
New test.

src/timefns.c
test/src/timefns-tests.el

index 5005c73b7fc4b61ce3fef1ef2d64eaadc7502560..7b5af6a5d241c3136e399d6c19759cf20fcc7cb0 100644 (file)
@@ -1488,10 +1488,11 @@ usage: (encode-time &optional TIME FORM &rest OBSOLESCENT-ARGUMENTS)  */)
       tm.tm_mon  = check_tm_member (XCAR (a), 1); a = XCDR (a);
       tm.tm_year = check_tm_member (XCAR (a), TM_YEAR_BASE); a = XCDR (a);
       a = XCDR (a);
-      if (SYMBOLP (XCAR (a)))
-       tm.tm_isdst = !NILP (XCAR (a));
+      Lisp_Object dstflag = XCAR (a);
       a = XCDR (a);
       zone = XCAR (a);
+      if (SYMBOLP (dstflag) && !FIXNUMP (zone) && !CONSP (zone))
+       tm.tm_isdst = !NILP (dstflag);
     }
   else if (nargs < 6)
     xsignal2 (Qwrong_number_of_arguments, Qencode_time, make_fixnum (nargs));
index 5c858ef3bd891430b42b79495ade2a2ddda61572..2c90af757f01ecb85b86ebc6c5bb3eda46c38bfe 100644 (file)
                      (< 0.99 (/ x y) 1.01)
                      (< 0.99 (/ (- (float-time a)) (float-time b))
                         1.01))))))))
+
+(ert-deftest encode-time-dst-numeric-zone ()
+    "Check for Bug#35502."
+    (should (time-equal-p
+             (encode-time '(29 31 17 30 4 2019 2 t 7200))
+             '(23752 27217))))