diff options
| author | Philipp Stephani | 2019-04-24 13:17:53 +0200 |
|---|---|---|
| committer | Philipp Stephani | 2019-04-24 13:17:53 +0200 |
| commit | 534c33cf375182c97291d2dd242f936df5953321 (patch) | |
| tree | a36d85bbc81ad93397bd9f81e962274ccb08f7ef | |
| parent | e290a7d1730c99010272bbff7f497c3041cef46d (diff) | |
| download | emacs-534c33cf375182c97291d2dd242f936df5953321.tar.gz emacs-534c33cf375182c97291d2dd242f936df5953321.zip | |
Fix return type of make_time.
make_time is documented to return a (TICKS . HZ) pair, so we can’t use
make_lisp_time. Introduce a new conversion function instead.
* src/emacs-module.c (module_make_time): Use timespec_to_lisp to
correct return type.
* src/timefns.c (timespec_to_lisp): New function.
(make_lisp_time): Use it.
* test/src/emacs-module-tests.el (mod-test-add-nanosecond/valid):
Check return type.
| -rw-r--r-- | src/emacs-module.c | 2 | ||||
| -rw-r--r-- | src/systime.h | 1 | ||||
| -rw-r--r-- | src/timefns.c | 9 | ||||
| -rw-r--r-- | test/src/emacs-module-tests.el | 8 |
4 files changed, 16 insertions, 4 deletions
diff --git a/src/emacs-module.c b/src/emacs-module.c index e203ce1d348..41ce9ef03e4 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c | |||
| @@ -753,7 +753,7 @@ static emacs_value | |||
| 753 | module_make_time (emacs_env *env, struct timespec time) | 753 | module_make_time (emacs_env *env, struct timespec time) |
| 754 | { | 754 | { |
| 755 | MODULE_FUNCTION_BEGIN (NULL); | 755 | MODULE_FUNCTION_BEGIN (NULL); |
| 756 | return lisp_to_value (env, make_lisp_time (time)); | 756 | return lisp_to_value (env, timespec_to_lisp (time)); |
| 757 | } | 757 | } |
| 758 | 758 | ||
| 759 | static void | 759 | static void |
diff --git a/src/systime.h b/src/systime.h index 89af0c5e3df..125b2f1385e 100644 --- a/src/systime.h +++ b/src/systime.h | |||
| @@ -89,6 +89,7 @@ struct lisp_time | |||
| 89 | /* defined in timefns.c */ | 89 | /* defined in timefns.c */ |
| 90 | extern struct timeval make_timeval (struct timespec) ATTRIBUTE_CONST; | 90 | extern struct timeval make_timeval (struct timespec) ATTRIBUTE_CONST; |
| 91 | extern Lisp_Object make_lisp_time (struct timespec); | 91 | extern Lisp_Object make_lisp_time (struct timespec); |
| 92 | extern Lisp_Object timespec_to_lisp (struct timespec); | ||
| 92 | extern bool list4_to_timespec (Lisp_Object, Lisp_Object, Lisp_Object, | 93 | extern bool list4_to_timespec (Lisp_Object, Lisp_Object, Lisp_Object, |
| 93 | Lisp_Object, struct timespec *); | 94 | Lisp_Object, struct timespec *); |
| 94 | extern struct timespec lisp_time_argument (Lisp_Object); | 95 | extern struct timespec lisp_time_argument (Lisp_Object); |
diff --git a/src/timefns.c b/src/timefns.c index cb953d1b4ce..71280aea06a 100644 --- a/src/timefns.c +++ b/src/timefns.c | |||
| @@ -528,7 +528,14 @@ make_lisp_time (struct timespec t) | |||
| 528 | make_fixnum (ns / 1000), make_fixnum (ns % 1000 * 1000)); | 528 | make_fixnum (ns / 1000), make_fixnum (ns % 1000 * 1000)); |
| 529 | } | 529 | } |
| 530 | else | 530 | else |
| 531 | return Fcons (timespec_ticks (t), timespec_hz); | 531 | return timespec_to_lisp (t); |
| 532 | } | ||
| 533 | |||
| 534 | /* Return (TICKS . HZ) for time T. */ | ||
| 535 | struct Lisp_Object | ||
| 536 | timespec_to_lisp (struct timespec t) | ||
| 537 | { | ||
| 538 | return Fcons (timespec_ticks (t), timespec_hz); | ||
| 532 | } | 539 | } |
| 533 | 540 | ||
| 534 | /* Convert T to a Lisp timestamp. FORM specifies the timestamp format. */ | 541 | /* Convert T to a Lisp timestamp. FORM specifies the timestamp format. */ |
diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el index 78f238140da..9eb38cd4548 100644 --- a/test/src/emacs-module-tests.el +++ b/test/src/emacs-module-tests.el | |||
| @@ -326,8 +326,12 @@ Interactively, you can try hitting \\[keyboard-quit] to quit." | |||
| 326 | ;; New (TICKS . HZ) format. | 326 | ;; New (TICKS . HZ) format. |
| 327 | '(123456789 . 1000000000))) | 327 | '(123456789 . 1000000000))) |
| 328 | (ert-info ((format "input: %s" input)) | 328 | (ert-info ((format "input: %s" input)) |
| 329 | (should (time-equal-p (mod-test-add-nanosecond input) | 329 | (let ((result (mod-test-add-nanosecond input))) |
| 330 | (time-add input '(0 0 0 1000))))))) | 330 | (should (consp result)) |
| 331 | (should (integerp (car result))) | ||
| 332 | (should (integerp (cdr result))) | ||
| 333 | (should (cl-plusp (cdr result))) | ||
| 334 | (should (time-equal-p result (time-add input '(0 0 0 1000)))))))) | ||
| 331 | 335 | ||
| 332 | (ert-deftest mod-test-add-nanosecond/nil () | 336 | (ert-deftest mod-test-add-nanosecond/nil () |
| 333 | (should (<= (float-time (mod-test-add-nanosecond nil)) | 337 | (should (<= (float-time (mod-test-add-nanosecond nil)) |