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