xref: /aosp_15_r20/external/libwebsockets/win32port/win32helpers/gettimeofday.c (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker #include <time.h>
2*1c60b9acSAndroid Build Coastguard Worker #include <windows.h>
3*1c60b9acSAndroid Build Coastguard Worker 
4*1c60b9acSAndroid Build Coastguard Worker #include "gettimeofday.h"
5*1c60b9acSAndroid Build Coastguard Worker 
6*1c60b9acSAndroid Build Coastguard Worker #ifndef LWS_MINGW_SUPPORT
gettimeofday(struct timeval * tv,struct timezone * tz)7*1c60b9acSAndroid Build Coastguard Worker int gettimeofday(struct timeval *tv, struct timezone *tz)
8*1c60b9acSAndroid Build Coastguard Worker {
9*1c60b9acSAndroid Build Coastguard Worker        FILETIME ft;
10*1c60b9acSAndroid Build Coastguard Worker 	unsigned __int64 tmpres = 0;
11*1c60b9acSAndroid Build Coastguard Worker 	static int tzflag;
12*1c60b9acSAndroid Build Coastguard Worker 
13*1c60b9acSAndroid Build Coastguard Worker 	if (NULL != tv) {
14*1c60b9acSAndroid Build Coastguard Worker 		GetSystemTimeAsFileTime(&ft);
15*1c60b9acSAndroid Build Coastguard Worker 
16*1c60b9acSAndroid Build Coastguard Worker 		tmpres |= ft.dwHighDateTime;
17*1c60b9acSAndroid Build Coastguard Worker 		tmpres <<= 32;
18*1c60b9acSAndroid Build Coastguard Worker 		tmpres |= ft.dwLowDateTime;
19*1c60b9acSAndroid Build Coastguard Worker 
20*1c60b9acSAndroid Build Coastguard Worker 		/*converting file time to unix epoch*/
21*1c60b9acSAndroid Build Coastguard Worker 		tmpres /= 10;  /*convert into microseconds*/
22*1c60b9acSAndroid Build Coastguard Worker 		tmpres -= DELTA_EPOCH_IN_MICROSECS;
23*1c60b9acSAndroid Build Coastguard Worker                tv->tv_sec = (long)(tmpres / 1000000UL);
24*1c60b9acSAndroid Build Coastguard Worker                tv->tv_usec = (long)(tmpres % 1000000UL);
25*1c60b9acSAndroid Build Coastguard Worker        }
26*1c60b9acSAndroid Build Coastguard Worker 
27*1c60b9acSAndroid Build Coastguard Worker        if (NULL != tz) {
28*1c60b9acSAndroid Build Coastguard Worker 		if (!tzflag) {
29*1c60b9acSAndroid Build Coastguard Worker 			_tzset();
30*1c60b9acSAndroid Build Coastguard Worker 			tzflag++;
31*1c60b9acSAndroid Build Coastguard Worker 		}
32*1c60b9acSAndroid Build Coastguard Worker 		tz->tz_minuteswest = _timezone / 60;
33*1c60b9acSAndroid Build Coastguard Worker 		tz->tz_dsttime = _daylight;
34*1c60b9acSAndroid Build Coastguard Worker 	}
35*1c60b9acSAndroid Build Coastguard Worker 
36*1c60b9acSAndroid Build Coastguard Worker        return 0;
37*1c60b9acSAndroid Build Coastguard Worker }
38*1c60b9acSAndroid Build Coastguard Worker #endif
39