Alexandre Julliard : kernel32: Move GetSystemTimes() implementation to kernelbase.

Alexandre Julliard julliard at winehq.org
Fri May 22 13:51:09 CDT 2020


Module: wine
Branch: master
Commit: 79e3c21c3cca822efedff3092df42f9044da10fe
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=79e3c21c3cca822efedff3092df42f9044da10fe

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May 22 09:15:45 2020 +0200

kernel32: Move GetSystemTimes() implementation to kernelbase.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/kernel32.spec     |  2 +-
 dlls/kernel32/time.c            | 71 -----------------------------------------
 dlls/kernelbase/kernelbase.spec |  2 +-
 dlls/kernelbase/sync.c          | 57 ++++++++++++++++++++++++++++++++-
 4 files changed, 58 insertions(+), 74 deletions(-)

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index efb892bf1b..72a09c53c8 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -835,7 +835,7 @@
 @ stdcall GetSystemTimeAdjustment(ptr ptr ptr)
 @ stdcall -import GetSystemTimeAsFileTime(ptr)
 @ stdcall -import GetSystemTimePreciseAsFileTime(ptr)
-@ stdcall GetSystemTimes(ptr ptr ptr)
+@ stdcall -import GetSystemTimes(ptr ptr ptr)
 @ stdcall -import GetSystemWindowsDirectoryA(ptr long)
 @ stdcall -import GetSystemWindowsDirectoryW(ptr long)
 @ stdcall -import GetSystemWow64DirectoryA(ptr long)
diff --git a/dlls/kernel32/time.c b/dlls/kernel32/time.c
index 5aef53da63..127f341adc 100644
--- a/dlls/kernel32/time.c
+++ b/dlls/kernel32/time.c
@@ -223,77 +223,6 @@ BOOL WINAPI FileTimeToDosDateTime( const FILETIME *ft, LPWORD fatdate,
     return TRUE;
 }
 
-/*********************************************************************
- *      GetSystemTimes                                  (KERNEL32.@)
- *
- * Retrieves system timing information
- *
- * PARAMS
- *  lpIdleTime [O] Destination for idle time.
- *  lpKernelTime [O] Destination for kernel time.
- *  lpUserTime [O] Destination for user time.
- *
- * RETURNS
- *  TRUE if success, FALSE otherwise.
- */
-BOOL WINAPI GetSystemTimes(LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime)
-{
-    LARGE_INTEGER idle_time, kernel_time, user_time;
-    SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION *sppi;
-    SYSTEM_BASIC_INFORMATION sbi;
-    ULONG ret_size;
-    int i;
-
-    TRACE("(%p,%p,%p)\n", lpIdleTime, lpKernelTime, lpUserTime);
-
-    if (!set_ntstatus( NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), &ret_size )))
-        return FALSE;
-
-    sppi = HeapAlloc( GetProcessHeap(), 0,
-                      sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * sbi.NumberOfProcessors);
-    if (!sppi)
-    {
-        SetLastError( ERROR_OUTOFMEMORY );
-        return FALSE;
-    }
-
-    if (!set_ntstatus( NtQuerySystemInformation( SystemProcessorPerformanceInformation, sppi,
-                                                 sizeof(*sppi) * sbi.NumberOfProcessors, &ret_size )))
-    {
-        HeapFree( GetProcessHeap(), 0, sppi );
-        return FALSE;
-    }
-
-    idle_time.QuadPart = 0;
-    kernel_time.QuadPart = 0;
-    user_time.QuadPart = 0;
-    for (i = 0; i < sbi.NumberOfProcessors; i++)
-    {
-        idle_time.QuadPart += sppi[i].IdleTime.QuadPart;
-        kernel_time.QuadPart += sppi[i].KernelTime.QuadPart;
-        user_time.QuadPart += sppi[i].UserTime.QuadPart;
-    }
-
-    if (lpIdleTime)
-    {
-        lpIdleTime->dwLowDateTime = idle_time.u.LowPart;
-        lpIdleTime->dwHighDateTime = idle_time.u.HighPart;
-    }
-    if (lpKernelTime)
-    {
-        lpKernelTime->dwLowDateTime = kernel_time.u.LowPart;
-        lpKernelTime->dwHighDateTime = kernel_time.u.HighPart;
-    }
-    if (lpUserTime)
-    {
-        lpUserTime->dwLowDateTime = user_time.u.LowPart;
-        lpUserTime->dwHighDateTime = user_time.u.HighPart;
-    }
-
-    HeapFree( GetProcessHeap(), 0, sppi );
-    return TRUE;
-}
-
 /******************************************************************************
  *           GetTickCount64       (KERNEL32.@)
  */
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index 4a6bc5eea4..1500229969 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -698,7 +698,7 @@
 @ stdcall GetSystemTimeAdjustment(ptr ptr ptr) kernel32.GetSystemTimeAdjustment
 @ stdcall GetSystemTimeAsFileTime(ptr)
 @ stdcall GetSystemTimePreciseAsFileTime(ptr)
-@ stdcall GetSystemTimes(ptr ptr ptr) kernel32.GetSystemTimes
+@ stdcall GetSystemTimes(ptr ptr ptr)
 @ stdcall GetSystemWindowsDirectoryA(ptr long)
 @ stdcall GetSystemWindowsDirectoryW(ptr long)
 @ stdcall GetSystemWow64Directory2A(ptr long long)
diff --git a/dlls/kernelbase/sync.c b/dlls/kernelbase/sync.c
index 99706277da..7ea70202c2 100644
--- a/dlls/kernelbase/sync.c
+++ b/dlls/kernelbase/sync.c
@@ -124,10 +124,60 @@ static BOOL get_open_object_attributes( OBJECT_ATTRIBUTES *attr, UNICODE_STRING
 
 
 /***********************************************************************
- * Waits
+ * Time functions
  ***********************************************************************/
 
 
+/*********************************************************************
+ *           GetSystemTimes   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH GetSystemTimes( FILETIME *idle, FILETIME *kernel, FILETIME *user )
+{
+    LARGE_INTEGER idle_time, kernel_time, user_time;
+    SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION *info;
+    ULONG ret_size;
+    DWORD i, cpus = NtCurrentTeb()->Peb->NumberOfProcessors;
+
+    if (!(info = HeapAlloc( GetProcessHeap(), 0, sizeof(*info) * cpus )))
+    {
+        SetLastError( ERROR_OUTOFMEMORY );
+        return FALSE;
+    }
+    if (!set_ntstatus( NtQuerySystemInformation( SystemProcessorPerformanceInformation, info,
+                                                 sizeof(*info) * cpus, &ret_size )))
+    {
+        HeapFree( GetProcessHeap(), 0, info );
+        return FALSE;
+    }
+    idle_time.QuadPart = 0;
+    kernel_time.QuadPart = 0;
+    user_time.QuadPart = 0;
+    for (i = 0; i < cpus; i++)
+    {
+        idle_time.QuadPart += info[i].IdleTime.QuadPart;
+        kernel_time.QuadPart += info[i].KernelTime.QuadPart;
+        user_time.QuadPart += info[i].UserTime.QuadPart;
+    }
+    if (idle)
+    {
+        idle->dwLowDateTime  = idle_time.u.LowPart;
+        idle->dwHighDateTime = idle_time.u.HighPart;
+    }
+    if (kernel)
+    {
+        kernel->dwLowDateTime  = kernel_time.u.LowPart;
+        kernel->dwHighDateTime = kernel_time.u.HighPart;
+    }
+    if (user)
+    {
+        user->dwLowDateTime  = user_time.u.LowPart;
+        user->dwHighDateTime = user_time.u.HighPart;
+    }
+    HeapFree( GetProcessHeap(), 0, info );
+    return TRUE;
+}
+
+
 /******************************************************************************
  *           GetTickCount   (kernelbase.@)
  */
@@ -156,6 +206,11 @@ ULONGLONG WINAPI DECLSPEC_HOTPATCH GetTickCount64(void)
 }
 
 
+/***********************************************************************
+ * Waits
+ ***********************************************************************/
+
+
 static HANDLE normalize_handle_if_console( HANDLE handle )
 {
     static HANDLE wait_event;




More information about the wine-cvs mailing list