| /* 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 |