summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/librdkafka-2.1.0/win32/wintime.h
blob: 07f55b8b176b3d8b554915e9aabf75d2d19b7535 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * Copyright: public domain
 */
#pragma once

/**
 * gettimeofday() for Win32 from
 * http://stackoverflow.com/questions/10905892/equivalent-of-gettimeday-for-windows
 */
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdint.h>  // portable: uint64_t   MSVC: __int64

static int gettimeofday(struct timeval *tp, struct timezone *tzp) {
        // Note: some broken versions only have 8 trailing zero's, the correct
        // epoch has 9 trailing zero's This magic number is the number of 100
        // nanosecond intervals since January 1, 1601 (UTC) until 00:00:00
        // January 1, 1970
        static const uint64_t EPOCH = ((uint64_t)116444736000000000ULL);

        SYSTEMTIME system_time;
        FILETIME file_time;
        uint64_t time;

        GetSystemTime(&system_time);
        SystemTimeToFileTime(&system_time, &file_time);
        time = ((uint64_t)file_time.dwLowDateTime);
        time += ((uint64_t)file_time.dwHighDateTime) << 32;

        tp->tv_sec  = (long)((time - EPOCH) / 10000000L);
        tp->tv_usec = (long)(system_time.wMilliseconds * 1000);
        return 0;
}