Module Name:    src
Committed By:   dholland
Date:           Sat Aug 27 18:48:30 UTC 2016

Modified Files:
        src/external/bsd/top/dist: utils.c

Log Message:
Be more careful/explicit with FP rounding when converting floating time
to timeval. Also, don't truncate the seconds part to int for y2038.

I've had this patch sitting around since 2010 and I completely forget
what motivated it.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/bsd/top/dist/utils.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/bsd/top/dist/utils.c
diff -u src/external/bsd/top/dist/utils.c:1.4 src/external/bsd/top/dist/utils.c:1.5
--- src/external/bsd/top/dist/utils.c:1.4	Tue May  5 18:51:22 2009
+++ src/external/bsd/top/dist/utils.c	Sat Aug 27 18:48:30 2016
@@ -41,6 +41,7 @@
 
 #include "os.h"
 #include <ctype.h>
+#include <math.h>
 #ifdef HAVE_STDARG_H
 #include <stdarg.h>
 #else
@@ -711,8 +712,11 @@ diff_per_second(unsigned int x, unsigned
 void
 double2tv(struct timeval *tv, double d)
 {
-    tv->tv_sec = (int)d;
-    tv->tv_usec = (d - tv->tv_sec) * 1000000;
+    double di;
+
+    di = floor(d);
+    tv->tv_sec = (time_t)di;
+    tv->tv_usec = (int)ceil((d - di) * 1000000.0);
 }
 
 static int debug_on = 0;

Reply via email to