From 045fb5cd9f6e1d4ffadb46dcf9c9f151dfb192d2 Mon Sep 17 00:00:00 2001 From: Stas Boukarev Date: Mon, 9 May 2016 14:50:28 +0300 Subject: [PATCH] Simplify get-timezone. Return seconds-west as the first value, daylight-savings-p as the second. Which removes the first value of NIL coming from the void return type. --- src/code/time.lisp | 14 +++++--------- src/code/unix.lisp | 12 +++--------- src/runtime/time.c | 4 ++-- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/code/time.lisp b/src/code/time.lisp index 9b930ce85..35180df5f 100644 --- a/src/code/time.lisp +++ b/src/code/time.lisp @@ -148,14 +148,10 @@ format." nine values: second, minute, hour, date, month, year, day of week (0 = Monday), T (daylight savings time) or NIL (standard time), and timezone. Completely ignores daylight-savings-time when time-zone is supplied." - (multiple-value-bind (daylight seconds-west) + (multiple-value-bind (seconds-west daylight) (if time-zone - (values nil (* time-zone 60 60)) - (multiple-value-bind (ignore seconds-west daylight) - (sb!unix::get-timezone (truncate-to-unix-range universal-time)) - (declare (ignore ignore)) - (declare (fixnum seconds-west)) - (values daylight seconds-west))) + (values (* time-zone 60 60) nil) + (sb!unix::get-timezone (truncate-to-unix-range universal-time))) (declare (fixnum seconds-west)) (multiple-value-bind (weeks secs) (truncate (+ (- universal-time seconds-west) seconds-offset) @@ -243,12 +239,12 @@ format." (if time-zone (setf encoded-time (+ second (* (+ minute (* (+ hours time-zone) 60)) 60))) (let* ((secwest-guess - (sb!unix::unix-get-seconds-west + (sb!unix::get-timezone (truncate-to-unix-range (* hours 60 60)))) (guess (+ second (* 60 (+ minute (* hours 60))) secwest-guess)) (secwest - (sb!unix::unix-get-seconds-west + (sb!unix::get-timezone (truncate-to-unix-range guess)))) (setf encoded-time (+ guess (- secwest secwest-guess))))) (assert (typep encoded-time '(integer 0))) diff --git a/src/code/unix.lisp b/src/code/unix.lisp index 602aad4fd..e223b3bc7 100644 --- a/src/code/unix.lisp +++ b/src/code/unix.lisp @@ -941,10 +941,9 @@ avoiding atexit(3) hooks, etc. Otherwise exit(2) is called." (tm-gmtoff long) ; Seconds east of UTC. (tm-zone c-string))) ; Timezone abbreviation. -(define-alien-routine get-timezone sb!alien:void - (when time-t :in) - (seconds-west sb!alien:int :out) - (daylight-savings-p sb!alien:boolean :out)) +(define-alien-routine get-timezone int + (when time-t) + (daylight-savings-p boolean :out)) #!-win32 (defun nanosleep (secs nsecs) @@ -983,11 +982,6 @@ avoiding atexit(3) hooks, etc. Otherwise exit(2) is called." t))) do (setf (slot req 'tv-sec) (slot rem 'tv-sec) (slot req 'tv-nsec) (slot rem 'tv-nsec))))) - -(defun unix-get-seconds-west (secs) - (multiple-value-bind (ignore seconds dst) (get-timezone secs) - (declare (ignore ignore) (ignore dst)) - (values seconds))) ;;;; sys/time.h diff --git a/src/runtime/time.c b/src/runtime/time.c index 7b4b167e7..0ae34c98e 100644 --- a/src/runtime/time.c +++ b/src/runtime/time.c @@ -23,7 +23,7 @@ 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) +int get_timezone(time_t when, boolean *dst) { struct tm ltm, gtm; int sw; @@ -50,6 +50,6 @@ void get_timezone(time_t when, int *secwest, boolean *dst) sw -= 24*3600; else if (gtm.tm_wday == (ltm.tm_wday + 1) % 7) sw += 24*3600; - *secwest = sw; *dst = ltm.tm_isdst; + return sw; } -- 2.11.4.GIT