summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/util/time.c21
-rw-r--r--lib/util/time.h5
2 files changed, 26 insertions, 0 deletions
diff --git a/lib/util/time.c b/lib/util/time.c
index 5ecf93cb77..ed3b4f8e30 100644
--- a/lib/util/time.c
+++ b/lib/util/time.c
@@ -65,6 +65,27 @@ _PUBLIC_ void clock_gettime_mono(struct timespec *tp)
}
}
+/**
+a wrapper to preferably get the monotonic time in seconds
+as this is only second resolution we can use the cached
+(and much faster) COARS clock variant
+**/
+_PUBLIC_ time_t time_mono(time_t *t)
+{
+ struct timespec tp;
+ int rc = -1;
+#ifdef CLOCK_MONOTONIC_COARSE
+ rc = clock_gettime(CLOCK_MONOTONIC_COARSE,&tp);
+#endif
+ if (rc != 0) {
+ clock_gettime_mono(&tp);
+ }
+ if (t != NULL) {
+ *t = tp.tv_sec;
+ }
+ return tp.tv_sec;
+}
+
#define TIME_FIXUP_CONSTANT 11644473600LL
diff --git a/lib/util/time.h b/lib/util/time.h
index 720a262b29..345382b80a 100644
--- a/lib/util/time.h
+++ b/lib/util/time.h
@@ -56,6 +56,11 @@ a wrapper to preferably get the monotonic time
_PUBLIC_ void clock_gettime_mono(struct timespec *tp);
/**
+a wrapper to preferably get the monotonic time in s
+**/
+_PUBLIC_ time_t time_mono(time_t *t);
+
+/**
interpret an 8 byte "filetime" structure to a time_t
It's originally in "100ns units since jan 1st 1601"
**/