add C11 timespec_get function, with associated time.h changes for C11
authorRich Felker <dalias@aerifal.cx>
Sat, 6 Sep 2014 16:58:09 +0000 (12:58 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 6 Sep 2014 16:58:09 +0000 (12:58 -0400)
based on patch by Jens Gustedt for inclusion with C11 threads
implementation, but committed separately since it's independent of
threads.

include/time.h
src/time/timespec_get.c [new file with mode: 0644]

index dc8807063af91c19f655e26d00d5360e14305df9..6124ef1e7603553909fb55b35f0d12b3681158cc 100644 (file)
@@ -17,11 +17,11 @@ extern "C" {
 #define __NEED_size_t
 #define __NEED_time_t
 #define __NEED_clock_t
+#define __NEED_struct_timespec
 
 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
  || defined(_BSD_SOURCE)
-#define __NEED_struct_timespec
 #define __NEED_clockid_t
 #define __NEED_timer_t
 #define __NEED_pid_t
@@ -59,9 +59,11 @@ struct tm *gmtime (const time_t *);
 struct tm *localtime (const time_t *);
 char *asctime (const struct tm *);
 char *ctime (const time_t *);
+int timespec_get(struct timespec *, int);
 
 #define CLOCKS_PER_SEC 1000000L
 
+#define TIME_UTC 1
 
 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
diff --git a/src/time/timespec_get.c b/src/time/timespec_get.c
new file mode 100644 (file)
index 0000000..03c5a77
--- /dev/null
@@ -0,0 +1,12 @@
+#include <time.h>
+
+int __clock_gettime(clockid_t, struct timespec *);
+
+/* There is no other implemented value than TIME_UTC; all other values
+ * are considered erroneous. */
+int timespec_get(struct timespec * ts, int base)
+{
+       if (base != TIME_UTC) return 0;
+       int ret = __clock_gettime(CLOCK_REALTIME, ts);
+       return ret < 0 ? 0 : base;
+}