Martin Storsjo : kernel32: Implement GetSystemTimePreciseAsFileTime.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed May 20 10:04:11 CDT 2015
Module: wine
Branch: master
Commit: c9c5ceccb4f50a81a0f99d683a46dc1f5d4ede62
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c9c5ceccb4f50a81a0f99d683a46dc1f5d4ede62
Author: Martin Storsjo <martin at martin.st>
Date: Tue May 19 22:20:46 2015 +0300
kernel32: Implement GetSystemTimePreciseAsFileTime.
This just falls back to doing the same as GetSystemTimeAsFileTime.
---
.../api-ms-win-core-sysinfo-l1-2-0.spec | 2 +-
.../api-ms-win-core-sysinfo-l1-2-1.spec | 2 +-
dlls/kernel32/kernel32.spec | 1 +
dlls/kernel32/tests/time.c | 42 ++++++++++++++++++++++
dlls/kernel32/time.c | 15 ++++++++
include/winbase.h | 1 +
6 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/dlls/api-ms-win-core-sysinfo-l1-2-0/api-ms-win-core-sysinfo-l1-2-0.spec b/dlls/api-ms-win-core-sysinfo-l1-2-0/api-ms-win-core-sysinfo-l1-2-0.spec
index d3df6bd..9b05674 100644
--- a/dlls/api-ms-win-core-sysinfo-l1-2-0/api-ms-win-core-sysinfo-l1-2-0.spec
+++ b/dlls/api-ms-win-core-sysinfo-l1-2-0/api-ms-win-core-sysinfo-l1-2-0.spec
@@ -14,7 +14,7 @@
@ stdcall GetSystemTime(ptr) kernel32.GetSystemTime
@ stdcall GetSystemTimeAdjustment(ptr ptr ptr) kernel32.GetSystemTimeAdjustment
@ stdcall GetSystemTimeAsFileTime(ptr) kernel32.GetSystemTimeAsFileTime
-@ stub GetSystemTimePreciseAsFileTime
+@ stdcall GetSystemTimePreciseAsFileTime(ptr) kernel32.GetSystemTimePreciseAsFileTime
@ stdcall GetSystemWindowsDirectoryA(ptr long) kernel32.GetSystemWindowsDirectoryA
@ stdcall GetSystemWindowsDirectoryW(ptr long) kernel32.GetSystemWindowsDirectoryW
@ stdcall GetTickCount() kernel32.GetTickCount
diff --git a/dlls/api-ms-win-core-sysinfo-l1-2-1/api-ms-win-core-sysinfo-l1-2-1.spec b/dlls/api-ms-win-core-sysinfo-l1-2-1/api-ms-win-core-sysinfo-l1-2-1.spec
index 29262c5..018ab05 100644
--- a/dlls/api-ms-win-core-sysinfo-l1-2-1/api-ms-win-core-sysinfo-l1-2-1.spec
+++ b/dlls/api-ms-win-core-sysinfo-l1-2-1/api-ms-win-core-sysinfo-l1-2-1.spec
@@ -16,7 +16,7 @@
@ stdcall GetSystemTime(ptr) kernel32.GetSystemTime
@ stdcall GetSystemTimeAdjustment(ptr ptr ptr) kernel32.GetSystemTimeAdjustment
@ stdcall GetSystemTimeAsFileTime(ptr) kernel32.GetSystemTimeAsFileTime
-@ stub GetSystemTimePreciseAsFileTime
+@ stdcall GetSystemTimePreciseAsFileTime(ptr) kernel32.GetSystemTimePreciseAsFileTime
@ stdcall GetSystemWindowsDirectoryA(ptr long) kernel32.GetSystemWindowsDirectoryA
@ stdcall GetSystemWindowsDirectoryW(ptr long) kernel32.GetSystemWindowsDirectoryW
@ stdcall -ret64 GetTickCount64() kernel32.GetTickCount64
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 1261738..8f6a13e 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -829,6 +829,7 @@
@ stdcall GetSystemTime(ptr)
@ stdcall GetSystemTimeAdjustment(ptr ptr ptr)
@ stdcall GetSystemTimeAsFileTime(ptr)
+@ stdcall GetSystemTimePreciseAsFileTime(ptr)
@ stdcall GetSystemTimes(ptr ptr ptr)
@ stdcall GetSystemWindowsDirectoryA(ptr long)
@ stdcall GetSystemWindowsDirectoryW(ptr long)
diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c
index 378941d..d205174 100644
--- a/dlls/kernel32/tests/time.c
+++ b/dlls/kernel32/tests/time.c
@@ -28,6 +28,7 @@ static BOOL (WINAPI *pSystemTimeToTzSpecificLocalTime)(LPTIME_ZONE_INFORMATION,
static int (WINAPI *pGetCalendarInfoA)(LCID,CALID,CALTYPE,LPSTR,int,LPDWORD);
static int (WINAPI *pGetCalendarInfoW)(LCID,CALID,CALTYPE,LPWSTR,int,LPDWORD);
static DWORD (WINAPI *pGetDynamicTimeZoneInformation)(DYNAMIC_TIME_ZONE_INFORMATION*);
+static void (WINAPI *pGetSystemTimePreciseAsFileTime)(LPFILETIME);
#define SECSPERMIN 60
#define SECSPERDAY 86400
@@ -761,6 +762,45 @@ static void test_GetDynamicTimeZoneInformation(void)
trace("Dyn TimeZoneKeyName %s\n", wine_dbgstr_w(dyninfo.TimeZoneKeyName));
}
+static ULONGLONG get_longlong_time(FILETIME *time)
+{
+ ULARGE_INTEGER uli;
+ uli.LowPart = time->dwLowDateTime;
+ uli.HighPart = time->dwHighDateTime;
+ return uli.QuadPart;
+}
+
+static void test_GetSystemTimePreciseAsFileTime(void)
+{
+ FILETIME ft;
+ ULONGLONG time1, time2;
+ LONGLONG diff;
+
+ if (!pGetSystemTimePreciseAsFileTime)
+ {
+ win_skip("GetSystemTimePreciseAsFileTime() is not supported.\n");
+ return;
+ }
+
+ GetSystemTimeAsFileTime(&ft);
+ time1 = get_longlong_time(&ft);
+ pGetSystemTimePreciseAsFileTime(&ft);
+ time2 = get_longlong_time(&ft);
+ diff = time2 - time1;
+ if (diff < 0)
+ diff = -diff;
+ ok(diff < 1000000, "Difference between GetSystemTimeAsFileTime and GetSystemTimePreciseAsFileTime more than 100 ms\n");
+
+ pGetSystemTimePreciseAsFileTime(&ft);
+ time1 = get_longlong_time(&ft);
+ do {
+ pGetSystemTimePreciseAsFileTime(&ft);
+ time2 = get_longlong_time(&ft);
+ } while (time2 == time1);
+ diff = time2 - time1;
+ ok(diff < 10000 && diff > 0, "GetSystemTimePreciseAsFileTime incremented by more than 1 ms\n");
+}
+
START_TEST(time)
{
HMODULE hKernel = GetModuleHandleA("kernel32");
@@ -769,6 +809,7 @@ START_TEST(time)
pGetCalendarInfoA = (void *)GetProcAddress(hKernel, "GetCalendarInfoA");
pGetCalendarInfoW = (void *)GetProcAddress(hKernel, "GetCalendarInfoW");
pGetDynamicTimeZoneInformation = (void *)GetProcAddress(hKernel, "GetDynamicTimeZoneInformation");
+ pGetSystemTimePreciseAsFileTime = (void *)GetProcAddress(hKernel, "GetSystemTimePreciseAsFileTime");
test_conversions();
test_invalid_arg();
@@ -779,4 +820,5 @@ START_TEST(time)
test_FileTimeToDosDateTime();
test_GetCalendarInfo();
test_GetDynamicTimeZoneInformation();
+ test_GetSystemTimePreciseAsFileTime();
}
diff --git a/dlls/kernel32/time.c b/dlls/kernel32/time.c
index 2b8e1d9..daafc7f 100644
--- a/dlls/kernel32/time.c
+++ b/dlls/kernel32/time.c
@@ -548,6 +548,21 @@ VOID WINAPI GetSystemTimeAsFileTime(
}
+/***********************************************************************
+ * GetSystemTimePreciseAsFileTime (KERNEL32.@)
+ *
+ * Get the current time in utc format, with <1 us precision.
+ *
+ * RETURNS
+ * Nothing.
+ */
+VOID WINAPI GetSystemTimePreciseAsFileTime(
+ LPFILETIME time) /* [out] Destination for the current utc time */
+{
+ GetSystemTimeAsFileTime(time);
+}
+
+
/*********************************************************************
* TIME_ClockTimeToFileTime (olorin at fandra.org, 20-Sep-1998)
*
diff --git a/include/winbase.h b/include/winbase.h
index a8f3fb6..7540e6d 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2040,6 +2040,7 @@ WINBASEAPI BOOL WINAPI GetSystemRegistryQuota(PDWORD,PDWORD);
WINBASEAPI VOID WINAPI GetSystemTime(LPSYSTEMTIME);
WINBASEAPI BOOL WINAPI GetSystemTimeAdjustment(PDWORD,PDWORD,PBOOL);
WINBASEAPI VOID WINAPI GetSystemTimeAsFileTime(LPFILETIME);
+WINBASEAPI VOID WINAPI GetSystemTimePreciseAsFileTime(LPFILETIME);
WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryA(LPSTR,UINT);
WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryW(LPWSTR,UINT);
#define GetSystemWindowsDirectory WINELIB_NAME_AW(GetSystemWindowsDirectory)
More information about the wine-cvs
mailing list