chiark / gitweb /
time-util: add clock_boottime_or_monotonic
[elogind.git] / src / shared / time-util.c
index fc79c569f4bceb52450a4a7be17ea09d6b8c817b..76ab143f34990af69a5aef064de90fcc027fcb20 100644 (file)
@@ -22,6 +22,7 @@
 #include <time.h>
 #include <string.h>
 #include <sys/timex.h>
+#include <sys/timerfd.h>
 
 #include "util.h"
 #include "time-util.h"
@@ -929,3 +930,21 @@ bool timezone_is_valid(const char *name) {
 
         return true;
 }
+
+clockid_t clock_boottime_or_monotonic(void) {
+        static clockid_t clock = -1;
+        int fd;
+
+        if (clock != -1)
+                return clock;
+
+        fd = timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK|TFD_CLOEXEC);
+        if (fd < 0)
+                clock = CLOCK_MONOTONIC;
+        else {
+                safe_close(fd);
+                clock = CLOCK_BOOTTIME;
+        }
+
+        return clock;
+}