From a7115745f228d6f383ad2179be2df967df14e3ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Mon, 10 Jan 2022 15:34:59 +0100 Subject: [PATCH] POSIX/C11: add timespec_get() Change-Id: I746e32f3a463bf2c7b03097c625901d54cf2b8eb Reviewed-on: https://review.haiku-os.org/c/haiku/+/4853 Reviewed-by: Rene Gollent --- headers/posix/time.h | 4 +++ .../libroot/posix/time/timespec_get.cpp | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/system/libroot/posix/time/timespec_get.cpp diff --git a/headers/posix/time.h b/headers/posix/time.h index 8ee6a61dfa..1658b696e0 100644 --- a/headers/posix/time.h +++ b/headers/posix/time.h @@ -25,6 +25,7 @@ typedef __haiku_int64 time_t; #define CLOCKS_PER_SEC 1000000 #define CLK_TCK CLOCKS_PER_SEC +#define TIME_UTC 1 #define MAX_TIMESTR 70 /* maximum length of a string returned by asctime(), and ctime() */ @@ -110,6 +111,9 @@ int timer_settime(timer_t timerID, int flags, const struct itimerspec* value, struct itimerspec* oldValue); int timer_getoverrun(timer_t timerID); +/* C11 timespec */ +int timespec_get(struct timespec *ts, int base); + /* special timezone support */ extern void tzset(void); diff --git a/src/system/libroot/posix/time/timespec_get.cpp b/src/system/libroot/posix/time/timespec_get.cpp new file mode 100644 index 0000000000..ba0bb8cff7 --- /dev/null +++ b/src/system/libroot/posix/time/timespec_get.cpp @@ -0,0 +1,25 @@ +/* + * Copyright 2022, Jérôme Duval, jerome.duval@gmail.com. + * Distributed under the terms of the MIT License. + */ + + +#include + +#include +#include + + +int +timespec_get(struct timespec* time, int base) +{ + if (base != TIME_UTC) + return 0; + bigtime_t microSeconds = real_time_clock_usecs(); + + // set the result + time->tv_sec = microSeconds / 1000000; + time->tv_nsec = (microSeconds % 1000000) * 1000; + return base; +} +