8 #include <botan/time.h>     9 #include <botan/exceptn.h>    12 #if defined(BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME)    16 #if defined(BOTAN_TARGET_OS_HAS_GETTIMEOFDAY)    20 #if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME)    22   #ifndef _POSIX_C_SOURCE    23     #define _POSIX_C_SOURCE 199309    28   #ifndef CLOCK_REALTIME    29     #define CLOCK_REALTIME 0    43    static const u64bit NANOSECONDS_UNITS = 1000000000;
    45    u64bit res = seconds * NANOSECONDS_UNITS;
    46    res += parts * (NANOSECONDS_UNITS / parts_hz);
    50 std::tm do_gmtime(time_t time_val)
    54 #if defined(BOTAN_TARGET_OS_HAS_GMTIME_S)    55    gmtime_s(&tm, &time_val); 
    56 #elif defined(BOTAN_TARGET_OS_HAS_GMTIME_R)    57    gmtime_r(&time_val, &tm); 
    59    std::tm* tm_p = std::gmtime(&time_val);
    61       throw Encoding_Error(
"time_t_to_tm could not convert");
    75    return static_cast<u64bit>(std::time(0));
    83    std::tm tm = do_gmtime(static_cast<std::time_t>(a_time_t));
    95 #if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME)    98    ::clock_gettime(CLOCK_REALTIME, &tv);
    99    return combine_timers(tv.tv_sec, tv.tv_nsec, 1000000000);
   101 #elif defined(BOTAN_TARGET_OS_HAS_GETTIMEOFDAY)   104    ::gettimeofday(&tv, 0);
   105    return combine_timers(tv.tv_sec, tv.tv_usec, 1000000);
   107 #elif defined(BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME)   111    ::GetSystemTimeAsFileTime(&tv);
   112    u64bit tstamp = (
static_cast<u64bit>(tv.dwHighDateTime) << 32) |
   115    return (tstamp * 100); 
   119    return combine_timers(static_cast<u32bit>(std::time(0)),
   120                          std::clock(), CLOCKS_PER_SEC);
 u64bit get_nanoseconds_clock()
calendar_point calendar_value(u64bit a_time_t)
unsigned long long u64bit