https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1938b7484e031483502962208d67993a3267880d

commit 1938b7484e031483502962208d67993a3267880d
Author:     Thomas Faber <[email protected]>
AuthorDate: Sun Jun 3 15:35:42 2018 +0200
Commit:     Thomas Faber <[email protected]>
CommitDate: Sun Jul 7 12:44:51 2019 +0200

    [TIMEDATE] Avoid the use of DisplayWin32Error in time sync utility 
functions. CORE-13001
---
 dll/cpl/timedate/internettime.c |  9 ++++-
 dll/cpl/timedate/timedate.h     |  2 +-
 dll/cpl/timedate/w32time.c      | 83 +++++++++++++++++++++++++----------------
 3 files changed, 59 insertions(+), 35 deletions(-)

diff --git a/dll/cpl/timedate/internettime.c b/dll/cpl/timedate/internettime.c
index 5a419e40e79..7c971846c7b 100644
--- a/dll/cpl/timedate/internettime.c
+++ b/dll/cpl/timedate/internettime.c
@@ -204,8 +204,15 @@ InetTimePageProc(HWND hwndDlg,
             {
                 case IDC_UPDATEBUTTON:
                 {
+                    DWORD dwError;
+
                     SetNTPServer(hwndDlg);
-                    SyncTimeNow();
+
+                    dwError = SyncTimeNow();
+                    if (dwError != ERROR_SUCCESS)
+                    {
+                        DisplayWin32Error(dwError);
+                    }
                 }
                 break;
 
diff --git a/dll/cpl/timedate/timedate.h b/dll/cpl/timedate/timedate.h
index 2fdddbd5a06..73b2a3a7c24 100644
--- a/dll/cpl/timedate/timedate.h
+++ b/dll/cpl/timedate/timedate.h
@@ -95,7 +95,7 @@ ULONG GetServerTime(LPWSTR lpAddress);
 
 
 /* w32time.c */
-VOID SyncTimeNow(VOID);
+DWORD SyncTimeNow(VOID);
 
 
 /* monthcal.c */
diff --git a/dll/cpl/timedate/w32time.c b/dll/cpl/timedate/w32time.c
index a8aed3f4d15..dfbf14347f1 100644
--- a/dll/cpl/timedate/w32time.c
+++ b/dll/cpl/timedate/w32time.c
@@ -8,7 +8,7 @@
 #include "timedate.h"
 
 /* Get the domain name from the registry */
-static BOOL
+static DWORD
 GetNTPServerAddress(LPWSTR *lpAddress)
 {
     HKEY hKey;
@@ -16,13 +16,16 @@ GetNTPServerAddress(LPWSTR *lpAddress)
     DWORD dwSize;
     LONG lRet;
 
+    *lpAddress = NULL;
+    hKey = NULL;
+
     lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
                          
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DateTime\\Servers",
                          0,
                          KEY_QUERY_VALUE,
                          &hKey);
     if (lRet != ERROR_SUCCESS)
-        goto fail;
+        goto Exit;
 
     /* Get data from default value */
     dwSize = 4 * sizeof(WCHAR);
@@ -33,7 +36,7 @@ GetNTPServerAddress(LPWSTR *lpAddress)
                             (LPBYTE)szSel,
                             &dwSize);
     if (lRet != ERROR_SUCCESS)
-        goto fail;
+        goto Exit;
 
     dwSize = 0;
     lRet = RegQueryValueExW(hKey,
@@ -43,7 +46,7 @@ GetNTPServerAddress(LPWSTR *lpAddress)
                             NULL,
                             &dwSize);
     if (lRet != ERROR_SUCCESS)
-        goto fail;
+        goto Exit;
 
     (*lpAddress) = (LPWSTR)HeapAlloc(GetProcessHeap(),
                                      0,
@@ -51,7 +54,7 @@ GetNTPServerAddress(LPWSTR *lpAddress)
     if ((*lpAddress) == NULL)
     {
         lRet = ERROR_NOT_ENOUGH_MEMORY;
-        goto fail;
+        goto Exit;
     }
 
     lRet = RegQueryValueExW(hKey,
@@ -61,38 +64,42 @@ GetNTPServerAddress(LPWSTR *lpAddress)
                             (LPBYTE)*lpAddress,
                             &dwSize);
     if (lRet != ERROR_SUCCESS)
-        goto fail;
-
-    RegCloseKey(hKey);
+        goto Exit;
 
-    return TRUE;
-
-fail:
-    DisplayWin32Error(lRet);
+Exit:
     if (hKey)
         RegCloseKey(hKey);
-    HeapFree(GetProcessHeap(), 0, *lpAddress);
-    return FALSE;
+    if (lRet != ERROR_SUCCESS)
+        HeapFree(GetProcessHeap(), 0, *lpAddress);
+
+    return lRet;
 }
 
 
 /* Request the time from the current NTP server */
-static ULONG
-GetTimeFromServer(VOID)
+static DWORD
+GetTimeFromServer(PULONG pulTime)
 {
-    LPWSTR lpAddress = NULL;
-    ULONG ulTime = 0;
+    LPWSTR lpAddress;
+    DWORD dwError;
 
-    if (GetNTPServerAddress(&lpAddress))
+    dwError = GetNTPServerAddress(&lpAddress);
+    if (dwError != ERROR_SUCCESS)
     {
-        ulTime = GetServerTime(lpAddress);
+        return dwError;
+    }
 
-        HeapFree(GetProcessHeap(),
-                 0,
-                 lpAddress);
+    *pulTime = GetServerTime(lpAddress);
+    if (*pulTime == 0)
+    {
+        dwError = ERROR_GEN_FAILURE;
     }
 
-    return ulTime;
+    HeapFree(GetProcessHeap(),
+             0,
+             lpAddress);
+
+    return dwError;
 }
 
 
@@ -158,7 +165,7 @@ SystemSetTime(LPSYSTEMTIME lpSystemTime)
  * 1st Jan, 1900. The time returned from the server
  * needs adding to that date to get the current Gregorian time
  */
-static VOID
+static DWORD
 UpdateSystemTime(ULONG ulTime)
 {
     FILETIME ftNew;
@@ -177,8 +184,7 @@ UpdateSystemTime(ULONG ulTime)
     /* Convert to a file time */
     if (!SystemTimeToFileTime(&stNew, &ftNew))
     {
-        DisplayWin32Error(GetLastError());
-        return;
+        return GetLastError();
     }
 
     /* Add on the time passed since 1st Jan 1900 */
@@ -189,23 +195,34 @@ UpdateSystemTime(ULONG ulTime)
     /* Convert back to a system time */
     if (!FileTimeToSystemTime(&ftNew, &stNew))
     {
-        DisplayWin32Error(GetLastError());
-        return;
+        return GetLastError();
     }
 
     if (!SystemSetTime(&stNew))
     {
-        DisplayWin32Error(GetLastError());
+        return GetLastError();
     }
+
+    return ERROR_SUCCESS;
 }
 
 
-VOID
+DWORD
 SyncTimeNow(VOID)
 {
+    DWORD dwError;
     ULONG ulTime;
-    ulTime = GetTimeFromServer();
+    dwError = GetTimeFromServer(&ulTime);
+    if (dwError != ERROR_SUCCESS)
+    {
+        return dwError;
+    }
+
     if (ulTime != 0)
-        UpdateSystemTime(ulTime);
+    {
+        dwError = UpdateSystemTime(ulTime);
+    }
+
+    return dwError;
 }
 

Reply via email to