]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
util: fix rounding of negative numbers in UTI_DoubleToTimeval()
authorBryan Christianson <bryan@whatroute.net>
Thu, 23 Jul 2015 11:59:31 +0000 (23:59 +1200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 23 Jul 2015 12:53:00 +0000 (14:53 +0200)
util.c

diff --git a/util.c b/util.c
index 0ebebff293a2eacba6b29873e27897c2e040b54c..e89b5f3b6f080dbd1c0a7ce34fc8a52018b57059 100644 (file)
--- a/util.c
+++ b/util.c
@@ -46,11 +46,13 @@ UTI_TimevalToDouble(struct timeval *a, double *b)
 INLINE_STATIC void
 UTI_DoubleToTimeval(double a, struct timeval *b)
 {
-  long int_part, frac_part;
+  long int_part;
+  double frac_part;
   int_part = (long)(a);
-  frac_part = (long)(0.5 + 1.0e6 * (a - (double)(int_part)));
+  frac_part = 1.0e6 * (a - (double)(int_part));
+  frac_part = frac_part > 0 ? frac_part + 0.5 : frac_part - 0.5;
   b->tv_sec = int_part;
-  b->tv_usec = frac_part;
+  b->tv_usec = (long)frac_part;
   UTI_NormaliseTimeval(b);
 }