summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-09-06 12:58:09 -0400
committerRich Felker <dalias@aerifal.cx>2014-09-06 12:58:09 -0400
commit6eb19505bc10eb7964c4863e53ef1028944044f2 (patch)
tree33c3ec8604e5342916d6a58d52125e354a488128
parent86876dbec55d9416859bbbbc9850b1ec81b6dbea (diff)
downloadmusl-6eb19505bc10eb7964c4863e53ef1028944044f2.tar.gz
add C11 timespec_get function, with associated time.h changes for C11
based on patch by Jens Gustedt for inclusion with C11 threads implementation, but committed separately since it's independent of threads.
-rw-r--r--include/time.h4
-rw-r--r--src/time/timespec_get.c12
2 files changed, 15 insertions, 1 deletions
diff --git a/include/time.h b/include/time.h
index dc880706..6124ef1e 100644
--- a/include/time.h
+++ b/include/time.h
@@ -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
index 00000000..03c5a77b
--- /dev/null
+++ b/src/time/timespec_get.c
@@ -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;
+}