From 912434849f7770f3fd4d6646ecc2846ff285f502 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Tue, 16 Jan 2018 16:40:03 +0100 Subject: [PATCH] [TIMEDATE] Correctly set the time when using the "Update now" button. CORE-14167 --- dll/cpl/timedate/dateandtime.c | 23 +++++++++++++++++------ dll/cpl/timedate/internettime.c | 3 ++- dll/cpl/timedate/ntpclient.c | 4 ++-- dll/cpl/timedate/timedate.h | 2 +- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/dll/cpl/timedate/dateandtime.c b/dll/cpl/timedate/dateandtime.c index c51e175cc98..fbd1dc39f5d 100644 --- a/dll/cpl/timedate/dateandtime.c +++ b/dll/cpl/timedate/dateandtime.c @@ -14,7 +14,8 @@ static WNDPROC pOldWndProc = NULL; BOOL -SystemSetLocalTime(LPSYSTEMTIME lpSystemTime) +SystemSetTime(LPSYSTEMTIME lpSystemTime, + BOOL SystemTime) { HANDLE hToken; DWORD PrevSize; @@ -45,11 +46,20 @@ SystemSetLocalTime(LPSYSTEMTIME lpSystemTime) GetLastError() == ERROR_SUCCESS) { /* - * We successfully enabled it, we're permitted to change the system time - * Call SetLocalTime twice to ensure correct results + * We successfully enabled it, we're permitted to change the time. + * Check the second parameter for SystemTime and if TRUE set System Time. + * Otherwise, if FALSE set the Local Time. + * Call SetLocalTime twice to ensure correct results. */ - Ret = SetLocalTime(lpSystemTime) && - SetLocalTime(lpSystemTime); + if (SystemTime) + { + Ret = SetSystemTime(lpSystemTime); + } + else + { + Ret = SetLocalTime(lpSystemTime) && + SetLocalTime(lpSystemTime); + } /* * For the sake of security, restore the previous status again @@ -86,7 +96,8 @@ SetLocalSystemTime(HWND hwnd) (WPARAM)&Time, 0)) { - SystemSetLocalTime(&Time); + /* Set Local Time with SystemTime = FALSE */ + SystemSetTime(&Time, FALSE); SetWindowLongPtrW(hwnd, DWL_MSGRESULT, diff --git a/dll/cpl/timedate/internettime.c b/dll/cpl/timedate/internettime.c index 9f0b8514518..35e724948a4 100644 --- a/dll/cpl/timedate/internettime.c +++ b/dll/cpl/timedate/internettime.c @@ -258,7 +258,8 @@ UpdateSystemTime(ULONG ulTime) return; } - if (!SystemSetLocalTime(&stNew)) + /* Use SystemSetTime with SystemTime = TRUE to set System Time */ + if (!SystemSetTime(&stNew, TRUE)) DisplayWin32Error(GetLastError()); } diff --git a/dll/cpl/timedate/ntpclient.c b/dll/cpl/timedate/ntpclient.c index 7442b49150f..fc378c624e2 100644 --- a/dll/cpl/timedate/ntpclient.c +++ b/dll/cpl/timedate/ntpclient.c @@ -121,15 +121,15 @@ ReceiveData(PINFO pInfo) if ((Ret != SOCKET_ERROR) && (Ret != 0)) { - Ret = recvfrom(pInfo->Sock, (char *)&pInfo->RecvPacket, sizeof(pInfo->RecvPacket), 0, NULL, NULL); + if (Ret != SOCKET_ERROR) - ulTime = ntohl(ulTime); + ulTime = ntohl(pInfo->RecvPacket.TransmitTimestamp.dwInteger); } return ulTime; diff --git a/dll/cpl/timedate/timedate.h b/dll/cpl/timedate/timedate.h index cf9eac1eda7..dfc54a18c3e 100644 --- a/dll/cpl/timedate/timedate.h +++ b/dll/cpl/timedate/timedate.h @@ -39,7 +39,7 @@ extern HINSTANCE hApplet; /* dateandtime.c */ INT_PTR CALLBACK DateTimePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); -BOOL SystemSetLocalTime(LPSYSTEMTIME lpSystemTime); +BOOL SystemSetTime(LPSYSTEMTIME lpSystemTime, BOOL SystemTime); /* timezone.c */