[PATCH 2/2] server: Fill the TimeZoneBias member of KSHARED_USER_DATA.
Zebediah Figura
zfigura at codeweavers.com
Mon Aug 23 15:54:39 CDT 2021
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
dlls/ntdll/tests/time.c | 8 ++++++++
server/fd.c | 14 ++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/dlls/ntdll/tests/time.c b/dlls/ntdll/tests/time.c
index 7ea506337a4..549db5b22b6 100644
--- a/dlls/ntdll/tests/time.c
+++ b/dlls/ntdll/tests/time.c
@@ -410,7 +410,9 @@ static ULONGLONG read_ksystem_time(volatile KSYSTEM_TIME *time)
static void test_user_shared_data_time(void)
{
KSHARED_USER_DATA *user_shared_data = (void *)0x7ffe0000;
+ SYSTEM_TIMEOFDAY_INFORMATION timeofday;
ULONGLONG t1, t2, t3;
+ NTSTATUS status;
int i = 0;
i = 0;
@@ -464,6 +466,12 @@ static void test_user_shared_data_time(void)
ok(t2 <= t3, "USD InterruptTime / RtlQueryUnbiasedInterruptTime are out of order %s %s\n",
wine_dbgstr_longlong(t2), wine_dbgstr_longlong(t3));
}
+
+ t1 = read_ksystem_time(&user_shared_data->TimeZoneBias);
+ status = NtQuerySystemInformation(SystemTimeOfDayInformation, &timeofday, sizeof(timeofday), NULL);
+ ok(!status, "failed to query time of day, status %#x\n", status);
+ ok(timeofday.TimeZoneBias.QuadPart == t1, "got USD bias %I64u, ntdll bias %I64u\n",
+ t1, timeofday.TimeZoneBias.QuadPart);
}
START_TEST(time)
diff --git a/server/fd.c b/server/fd.c
index 60555032f21..86c51529147 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -410,6 +410,16 @@ static void atomic_store_long(volatile LONG *ptr, LONG value)
static void set_user_shared_data_time(void)
{
timeout_t tick_count = monotonic_time / 10000;
+ timeout_t timezone_bias;
+ struct tm *tm;
+ time_t now;
+
+ now = time( NULL );
+ tm = gmtime( &now );
+ timezone_bias = mktime( tm ) - now;
+ tm = localtime( &now );
+ if (tm->tm_isdst) timezone_bias -= 3600;
+ timezone_bias *= TICKS_PER_SEC;
atomic_store_long(&user_shared_data->SystemTime.High2Time, current_time >> 32);
atomic_store_ulong(&user_shared_data->SystemTime.LowPart, current_time);
@@ -423,6 +433,10 @@ static void set_user_shared_data_time(void)
atomic_store_ulong(&user_shared_data->TickCount.LowPart, tick_count);
atomic_store_long(&user_shared_data->TickCount.High1Time, tick_count >> 32);
atomic_store_ulong(&user_shared_data->TickCountLowDeprecated, tick_count);
+
+ atomic_store_long(&user_shared_data->TimeZoneBias.High2Time, timezone_bias >> 32);
+ atomic_store_ulong(&user_shared_data->TimeZoneBias.LowPart, timezone_bias);
+ atomic_store_long(&user_shared_data->TimeZoneBias.High1Time, timezone_bias >> 32);
}
void set_current_time(void)
--
2.30.2
More information about the wine-devel
mailing list