[TIMEDATE] Correctly set the time when using the "Update now" button. CORE-14167 294/head
authorDoug Lyons <douglyons@douglyons.com>
Tue, 16 Jan 2018 15:40:03 +0000 (16:40 +0100)
committerThomas Faber <thomas.faber@reactos.org>
Wed, 31 Jan 2018 10:51:08 +0000 (11:51 +0100)
dll/cpl/timedate/dateandtime.c
dll/cpl/timedate/internettime.c
dll/cpl/timedate/ntpclient.c
dll/cpl/timedate/timedate.h

index c51e175..fbd1dc3 100644 (file)
@@ -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,
index 9f0b851..35e7249 100644 (file)
@@ -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());
 }
 
index 7442b49..fc378c6 100644 (file)
@@ -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;
index cf9eac1..dfc54a1 100644 (file)
@@ -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 */