41 lines
1.2 KiB
C
41 lines
1.2 KiB
C
#include <sys/types.h>
|
|
#ifdef __WINDOWS__
|
|
#define WINDOWS_LEAN_AND_MEAN 1
|
|
#include <windows.h>
|
|
#else
|
|
#include <sys/time.h>
|
|
#endif
|
|
#include "taia.h"
|
|
|
|
/* XXX: breaks tai encapsulation */
|
|
|
|
/*-------------------------------------------------------------------------
|
|
* The Microsoft Win32 API can return the current system time in "file
|
|
* timestamp" format, which is a 64-bit value representing the number of
|
|
* 100-nanosecond ticks since {AD1601-01-01 00:00:00 Z}.
|
|
* 11644473600 is seconds offset AD1601 to AD1970
|
|
*------------------------------------------------------------------------*/
|
|
|
|
void taia_now(struct taia *t)
|
|
{
|
|
#ifdef __WINDOWS__
|
|
FILETIME ft;
|
|
int64_t cns; /* 100ns ticks */
|
|
|
|
/* Get the current system time */
|
|
GetSystemTimeAsFileTime(&ft);
|
|
|
|
/* Convert to longtime_t form */
|
|
cns = ((int64_t)ft.dwHighDateTime << 32) + ft.dwLowDateTime;
|
|
t->sec.x = cns/10000000 - 11644473600 + ULL(4611686018427387914);
|
|
t->nano = (long)((cns % 10000000))*100;
|
|
t->atto = 0;
|
|
#else
|
|
struct timeval now;
|
|
gettimeofday(&now,(struct timezone *) 0);
|
|
t->sec.x = ULL(4611686018427387914) + (uint64_t) now.tv_sec;
|
|
t->nano = 1000 * now.tv_usec + 500;
|
|
t->atto = 0;
|
|
#endif
|
|
}
|