Use GetSystemTimePreciseAsFileTime on recent Windows

* win32/win32.c (gettiemeofday, wutime): use GetSystemTimePreciseAsFileTime
  instead of GetSystemTimeAsFileTime if it is available.
  This patch is based on Takehiro Kubo <kubo@jiubao.org> 's one (change only
  the name of wrapper function).  Thanks! and sorry to late
  [ruby-dev:50167] [Feature #13732]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60240 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
usa 2017-10-21 08:41:22 +00:00
Родитель ccfe37884a
Коммит 6a832cdb8d
1 изменённых файлов: 17 добавлений и 2 удалений

Просмотреть файл

@ -4576,13 +4576,28 @@ filetime_to_timeval(const FILETIME* ft, struct timeval *tv)
return tv->tv_sec > 0 ? 0 : -1;
}
static void get_systemtime(FILETIME *ft)
{
typedef void (WINAPI *get_time_func)(FILETIME *ft);
static get_time_func func = (get_time_func)-1;
if (func == (get_time_func)-1) {
/* GetSystemTimePreciseAsFileTime is available since Windows 8 and Windows Server 2012. */
func = (get_time_func)get_proc_address("kernel32", "GetSystemTimePreciseAsFileTime", NULL);
if (func == NULL) {
func = GetSystemTimeAsFileTime;
}
}
func(ft);
}
/* License: Ruby's */
int __cdecl
gettimeofday(struct timeval *tv, struct timezone *tz)
{
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
get_systemtime(&ft);
filetime_to_timeval(&ft, tv);
return 0;
@ -7314,7 +7329,7 @@ wutime(const WCHAR *path, const struct utimbuf *times)
}
}
else {
GetSystemTimeAsFileTime(&atime);
get_systemtime(&atime);
mtime = atime;
}