mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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:
parent
ccfe37884a
commit
6a832cdb8d
1 changed files with 17 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue