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