aboutsummaryrefslogtreecommitdiffstats
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/util.c b/src/util.c
index ef9531bd3..64f8910e6 100644
--- a/src/util.c
+++ b/src/util.c
@@ -787,18 +787,28 @@ resolve_stat_filename (memory_pool_t *pool, char *pattern, char *rcpt, char *fro
return new;
}
-long int
-calculate_check_time (struct timespec *begin)
+const char *
+calculate_check_time (struct timespec *begin, int resolution)
{
struct timespec ts;
- long int res;
+ double diff;
+ static char res[sizeof("100000.000")];
+ static char fmt[sizeof("%.10f")];
+#ifdef HAVE_CLOCK_PROCESS_CPUTIME_ID
+ clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &ts);
+#elif defined(HAVE_CLOCK_VIRTUAL)
+ clock_gettime (CLOCK_VIRTUAL, &ts);
+#else
clock_gettime (CLOCK_REALTIME, &ts);
+#endif
- res = (ts.tv_sec - begin->tv_sec) * 1000 + /* Seconds */
- (ts.tv_nsec - begin->tv_nsec) / 1000000; /* Nanoseconds */
+ diff = (ts.tv_sec - begin->tv_sec) * 1000. + /* Seconds */
+ (ts.tv_nsec - begin->tv_nsec) / 1000000.; /* Nanoseconds */
+ sprintf (fmt, "%%.%df", resolution);
+ snprintf (res, sizeof (res), fmt, diff);
- return res;
+ return (const char *)res;
}
/*