From 325f51c84d9ad4d9776784bd324b347ffe4fe51b Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 30 Apr 2019 10:45:48 -0700 Subject: [PATCH] Fix decode-time/encode-time roundtrip on macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 | 5 +++-- test/src/timefns-tests.el | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/timefns.c b/src/timefns.c index 5005c73b7f..7b5af6a5d2 100644 --- a/src/timefns.c +++ b/src/timefns.c @@ -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)); diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el index 5c858ef3bd..2c90af757f 100644 --- a/test/src/timefns-tests.el +++ b/test/src/timefns-tests.el @@ -142,3 +142,9 @@ timefns-tests--have-leap-seconds (< 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)))) -- 2.20.1