diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2013-09-19 14:40:08 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2013-09-19 14:40:08 -0700 |
commit | 230fe2a5a10f2bc128f354e3fb1b48536b1f143b (patch) | |
tree | b282d5f242b8ada877d188d03d43da78b175d67a /lib/dtotimespec.c | |
parent | c39cc7d149d28060c40bc206eb8a63f7a0636301 (diff) | |
download | emacs-230fe2a5a10f2bc128f354e3fb1b48536b1f143b.tar.gz emacs-230fe2a5a10f2bc128f354e3fb1b48536b1f143b.tar.bz2 emacs-230fe2a5a10f2bc128f354e3fb1b48536b1f143b.zip |
Merge from gnulib.
This incorporates the following changes:
2013-09-19 stdio: OS X port of putc_unlocked + extern inline
2013-09-19 signal: OS X port of sigaddset etc. + extern inline
2013-09-19 extern-inline: do not always suppress extern inline on OS X
2013-09-17 getgroups: statement without effect
2013-08-28 headers: check that _GL_INLINE_HEADER_BEGIN is defined
Diffstat (limited to 'lib/dtotimespec.c')
-rw-r--r-- | lib/dtotimespec.c | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/lib/dtotimespec.c b/lib/dtotimespec.c index ecce2e5bcc5..064f7d3a0a9 100644 --- a/lib/dtotimespec.c +++ b/lib/dtotimespec.c @@ -29,41 +29,31 @@ struct timespec dtotimespec (double sec) { - enum { BILLION = 1000 * 1000 * 1000 }; double min_representable = TYPE_MINIMUM (time_t); double max_representable = - ((TYPE_MAXIMUM (time_t) * (double) BILLION + (BILLION - 1)) - / BILLION); - struct timespec r; + ((TYPE_MAXIMUM (time_t) * (double) TIMESPEC_RESOLUTION + + (TIMESPEC_RESOLUTION - 1)) + / TIMESPEC_RESOLUTION); if (! (min_representable < sec)) - { - r.tv_sec = TYPE_MINIMUM (time_t); - r.tv_nsec = 0; - } + return make_timespec (TYPE_MINIMUM (time_t), 0); else if (! (sec < max_representable)) - { - r.tv_sec = TYPE_MAXIMUM (time_t); - r.tv_nsec = BILLION - 1; - } + return make_timespec (TYPE_MAXIMUM (time_t), TIMESPEC_RESOLUTION - 1); else { time_t s = sec; - double frac = BILLION * (sec - s); + double frac = TIMESPEC_RESOLUTION * (sec - s); long ns = frac; ns += ns < frac; - s += ns / BILLION; - ns %= BILLION; + s += ns / TIMESPEC_RESOLUTION; + ns %= TIMESPEC_RESOLUTION; if (ns < 0) { s--; - ns += BILLION; + ns += TIMESPEC_RESOLUTION; } - r.tv_sec = s; - r.tv_nsec = ns; + return make_timespec (s, ns); } - - return r; } |