aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/timer.el
diff options
context:
space:
mode:
authorGerd Moellmann2001-10-05 09:26:53 +0000
committerGerd Moellmann2001-10-05 09:26:53 +0000
commite5da45fda7e205a900dfa62236afa239bfcb534a (patch)
treea9a0af4a345b44caf65a72e2854f3af79b7038b0 /lisp/timer.el
parent08b1f8a12ee617698dccf25f9c1dd9d0e2c32e97 (diff)
downloademacs-e5da45fda7e205a900dfa62236afa239bfcb534a.tar.gz
emacs-e5da45fda7e205a900dfa62236afa239bfcb534a.zip
(timer-relative-time): Fix computation for negative `micro'.
Diffstat (limited to 'lisp/timer.el')
-rw-r--r--lisp/timer.el6
1 files changed, 4 insertions, 2 deletions
diff --git a/lisp/timer.el b/lisp/timer.el
index 3820b57365e..0c159c6023d 100644
--- a/lisp/timer.el
+++ b/lisp/timer.el
@@ -116,9 +116,11 @@ SECS may be a fraction."
116 (setq low (+ low (floor secs))) 116 (setq low (+ low (floor secs)))
117 117
118 ;; Normalize 118 ;; Normalize
119 (setq low (+ low (/ micro 1000000))) 119 ;; `/' rounds towards zero while `mod' returns a positive number,
120 ;; so we can't rely on (= a (+ (* 100 (/ a 100)) (mod a 100))).
121 (setq low (+ low (/ micro 1000000) (if (< micro 0) -1 0)))
120 (setq micro (mod micro 1000000)) 122 (setq micro (mod micro 1000000))
121 (setq high (+ high (/ low 65536))) 123 (setq high (+ high (/ low 65536) (if (< low 0) -1 0)))
122 (setq low (logand low 65535)) 124 (setq low (logand low 65535))
123 125
124 (list high low (and (/= micro 0) micro)))) 126 (list high low (and (/= micro 0) micro))))