kernel32: Factor out all kernel32 timeout-conversion snippets to one helper functions.
diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
index ff987c3..be536a4 100644
--- a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -82,6 +82,14 @@
     return handle;
 }
 
+/* helper for kernel32->ntdll timeout format conversion */
+static inline PLARGE_INTEGER get_nt_timeout( PLARGE_INTEGER pTime, DWORD timeout )
+{
+    if (timeout == INFINITE) return NULL;
+    pTime->QuadPart = (ULONGLONG)timeout * -10000;
+    return pTime;
+}
+
 /***********************************************************************
  *              Sleep  (KERNEL32.@)
  */
@@ -96,18 +104,11 @@
 DWORD WINAPI SleepEx( DWORD timeout, BOOL alertable )
 {
     NTSTATUS status;
+    LARGE_INTEGER time;
 
-    if (timeout == INFINITE) status = NtDelayExecution( alertable, NULL );
-    else
-    {
-        LARGE_INTEGER time;
-
-        time.QuadPart = timeout * (ULONGLONG)10000;
-        time.QuadPart = -time.QuadPart;
-        status = NtDelayExecution( alertable, &time );
-    }
-    if (status != STATUS_USER_APC) status = STATUS_SUCCESS;
-    return status;
+    status = NtDelayExecution( alertable, get_nt_timeout( &time, timeout ) );
+    if (status == STATUS_USER_APC) return WAIT_IO_COMPLETION;
+    return 0;
 }
 
 
@@ -158,6 +159,7 @@
 {
     NTSTATUS status;
     HANDLE hloc[MAXIMUM_WAIT_OBJECTS];
+    LARGE_INTEGER time;
     unsigned int i;
 
     if (count > MAXIMUM_WAIT_OBJECTS)
@@ -187,18 +189,8 @@
         }
     }
 
-    if (timeout == INFINITE)
-    {
-        status = NtWaitForMultipleObjects( count, hloc, wait_all, alertable, NULL );
-    }
-    else
-    {
-        LARGE_INTEGER time;
-
-        time.QuadPart = timeout * (ULONGLONG)10000;
-        time.QuadPart = -time.QuadPart;
-        status = NtWaitForMultipleObjects( count, hloc, wait_all, alertable, &time );
-    }
+    status = NtWaitForMultipleObjects( count, hloc, wait_all, alertable,
+                                       get_nt_timeout( &time, timeout ) );
 
     if (HIWORD(status))  /* is it an error code? */
     {
@@ -302,20 +294,13 @@
                                   DWORD dwMilliseconds, BOOL bAlertable )
 {
     NTSTATUS status;
-    LARGE_INTEGER timeout, *ptimeout = NULL;
+    LARGE_INTEGER timeout;
 
     TRACE("%p %p %d %d\n", hObjectToSignal,
           hObjectToWaitOn, dwMilliseconds, bAlertable);
 
-    if (dwMilliseconds != INFINITE)
-    {
-        timeout.QuadPart = dwMilliseconds * (ULONGLONG)10000;
-        timeout.QuadPart = -timeout.QuadPart;
-        ptimeout = &timeout;
-    }
-
-    status = NtSignalAndWaitForSingleObject( hObjectToSignal, hObjectToWaitOn,
-                                             bAlertable, ptimeout );
+    status = NtSignalAndWaitForSingleObject( hObjectToSignal, hObjectToWaitOn, bAlertable,
+                                             get_nt_timeout( &timeout, dwMilliseconds ) );
     if (HIWORD(status))
     {
         SetLastError( RtlNtStatusToDosError(status) );