https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1938b7484e03148350296…
commit 1938b7484e031483502962208d67993a3267880d
Author: Thomas Faber <thomas.faber(a)reactos.org>
AuthorDate: Sun Jun 3 15:35:42 2018 +0200
Commit: Thomas Faber <thomas.faber(a)reactos.org>
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;
}