aboutsummaryrefslogtreecommitdiffstats
path: root/src/util.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-03-25 13:10:48 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-03-25 13:10:48 +0300
commitb539b432494cafe78c47a0fc13a289006c4a1b24 (patch)
treeef90a21ec435241f11e6354208853e915a03d5c8 /src/util.c
parent62aaf7da57503a257aecede98ba2ae2e1f2ee3e2 (diff)
downloadrspamd-b539b432494cafe78c47a0fc13a289006c4a1b24.tar.gz
rspamd-b539b432494cafe78c47a0fc13a289006c4a1b24.zip
* More accurate work with clock
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;
}
/*