return ret;
}
+
+#ifdef __APPLE__
+#include <mach/mach_host.h> /* host_get_clock_service() */
+#include <mach/mach_port.h> /* mach_port_deallocate() */
+#include <mach/mach_init.h> /* mach_host_self(), mach_task_self() */
+#include <mach/clock.h> /* clock_get_time() */
+
+static clock_serv_t clock_realtime;
+static clock_serv_t clock_monotonic;
+
+static void __constructor clock_name_init(void)
+{
+ mach_port_t host_self = mach_host_self();
+
+ host_get_clock_service(host_self, CLOCK_REALTIME, &clock_realtime);
+ host_get_clock_service(host_self, CLOCK_MONOTONIC, &clock_monotonic);
+}
+
+static void __destructor clock_name_dealloc(void)
+{
+ mach_port_t self = mach_task_self();
+
+ mach_port_deallocate(self, clock_realtime);
+ mach_port_deallocate(self, clock_monotonic);
+}
+
+int clock_gettime(int type, struct timespec *tv)
+{
+ int retval = -1;
+ mach_timespec_t mts;
+
+ switch (type) {
+ case CLOCK_REALTIME:
+ retval = clock_get_time(clock_realtime, &mts);
+ break;
+ case CLOCK_MONOTONIC:
+ retval = clock_get_time(clock_monotonic, &mts);
+ break;
+ default:
+ goto out;
+ }
+
+ tv->tv_sec = mts.tv_sec;
+ tv->tv_nsec = mts.tv_nsec;
+out:
+ return retval;
+}
+
+#endif