Alexandre Julliard : kernel32: Wait in overlapped Read/ WriteFile even when no overlapped structure is passed.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 16 16:27:15 CDT 2007


Module: wine
Branch: master
Commit: acb43cfef2c114c4da5c57675379a92bc9cba8f0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=acb43cfef2c114c4da5c57675379a92bc9cba8f0

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Jul 16 15:27:53 2007 +0200

kernel32: Wait in overlapped Read/WriteFile even when no overlapped structure is passed.

---

 dlls/kernel32/file.c       |   12 ++++++++++++
 dlls/kernel32/tests/pipe.c |   10 ++--------
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index a3d6942..1472893 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -424,6 +424,12 @@ BOOL WINAPI ReadFile( HANDLE hFile, LPVOID buffer, DWORD bytesToRead,
 
     status = NtReadFile(hFile, hEvent, NULL, NULL, io_status, buffer, bytesToRead, poffset, NULL);
 
+    if (status == STATUS_PENDING && !overlapped)
+    {
+        WaitForSingleObject( hFile, INFINITE );
+        status = io_status->u.Status;
+    }
+
     if (status != STATUS_PENDING && bytesRead)
         *bytesRead = io_status->Information;
 
@@ -510,6 +516,12 @@ BOOL WINAPI WriteFile( HANDLE hFile, LPCVOID buffer, DWORD bytesToWrite,
                   buffer, bytesToWrite);
     }
 
+    if (status == STATUS_PENDING && !overlapped)
+    {
+        WaitForSingleObject( hFile, INFINITE );
+        status = piosb->u.Status;
+    }
+
     if (status != STATUS_PENDING && bytesWritten)
         *bytesWritten = piosb->Information;
 
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index ccb72ba..2862592 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -1293,10 +1293,7 @@ static DWORD CALLBACK overlapped_server(LPVOID arg)
 
     /* This should block */
     ret = ReadFile(pipe, buf, sizeof(buf), &num, NULL);
-    if(ret == 0)
-        todo_wine ok(ret == 1, "ret %d\n", ret);
-    else
-        ok(ret == 1, "ret %d\n", ret);
+    ok(ret == 1, "ret %d\n", ret);
 
     DisconnectNamedPipe(pipe);
     CloseHandle(ol.hEvent);
@@ -1322,10 +1319,7 @@ static void test_overlapped(void)
     Sleep(1);
 
     ret = WriteFile(pipe, "x", 1, &num, NULL);
-    if(ret == 0)
-        todo_wine ok(ret == 1, "ret %d\n", ret);
-    else
-        ok(ret == 1, "ret %d\n", ret);
+    ok(ret == 1, "ret %d\n", ret);
 
     WaitForSingleObject(thread, INFINITE);
     CloseHandle(pipe);




More information about the wine-cvs mailing list