aboutsummaryrefslogtreecommitdiff
path: root/src/compat/clock.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/compat/clock.h')
-rw-r--r--src/compat/clock.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/compat/clock.h b/src/compat/clock.h
new file mode 100644
index 0000000..15f3223
--- /dev/null
+++ b/src/compat/clock.h
@@ -0,0 +1,74 @@
+/* Copyright (c) 2012, David Goulet <dgoulet@ev0ke.net>
+ * Jacob Appelbaum <jacob@torproject.org>
+ * Copyright (c) 2012, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file clock.h
+ * \brief Header file for the clock primitives.
+ **/
+
+#pragma once
+#ifndef CLOCK_HEADER_GUARD
+#define CLOCK_HEADER_GUARD 1
+
+#include <src/visibility.h>
+
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#ifdef TARGET_OS_OPENBSD
+#include <sys/time.h>
+#endif
+
+#ifdef HAVE_MACH_CLOCK_H
+#include <mach/clock.h>
+#endif
+#ifdef HAVE_MACH_MACH_H
+#include <mach/mach.h>
+#endif
+
+struct tlsdate_time {
+#if defined(__linux__) || defined(__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__DragonFly__)
+ struct timespec tp;
+#elif defined(__APPLE__)
+ mach_timespec_t tp;
+#elif _WIN32
+ void *tp;
+#elif TARGET_OS_HAIKU
+ struct timespec tp;
+#elif TARGET_OS_CYGWIN
+ struct timespec tp;
+#elif TARGET_OS_MINGW
+ struct timespec tp;
+#elif TARGET_OS_GNUHURD
+ struct timespec tp;
+#else
+ struct timespec tp;
+#endif
+};
+
+TLSDATE_API
+int clock_get_real_time(struct tlsdate_time *time);
+
+TLSDATE_API
+int clock_set_real_time(const struct tlsdate_time *time);
+
+TLSDATE_API
+void clock_init_time(struct tlsdate_time *time, time_t sec, long nsec);
+
+/* Helper macros to access time values */
+#define CLOCK_SEC(time) ((time)->tp.tv_sec)
+#define CLOCK_MSEC(time) ((time)->tp.tv_nsec / 1000000)
+#define CLOCK_USEC(time) ((time)->tp.tv_nsec / 1000)
+#define CLOCK_NSEC(time) ((time)->tp.tv_nsec)
+
+/* Helper macros to access time values. TODO: Complete them */
+/*
+#define CLOCK_SEC(time)
+#define CLOCK_MSEC(time)
+#define CLOCK_USEC(time)
+#define CLOCK_NSEC(time)
+*/
+#endif // CLOCK_HEADER_GUARD