/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

static inline void time64_to_filetime(__time64_t time64, FILETIME *filetime)
{
    /* conversion from signed 64-bit UNIX timestamp (1970-01-01 in seconds) to unsigned 64-bit FILETIME (1601-01-01 in 100-nanoseconds) */
    unsigned long long value = (time64 * 10000000) + 116444736000000000LL;
    filetime->dwLowDateTime = value & 0xffffffff;
    filetime->dwHighDateTime = value >> 32;
}

static inline __time64_t filetime_to_time64(FILETIME *filetime)
{
    unsigned long long value = ((unsigned long long)filetime->dwHighDateTime << 32) | filetime->dwLowDateTime;
    if (value == 0) return 0; /* 0 has special meaning - not set */
    /* conversion from unsigned 64-bit FILETIME (1601-01-01 in 100-nanoseconds) to signed 64-bit UNIX timestamp (1970-01-01 in seconds) */
    return (value - 116444736000000000LL) / 10000000;
}
