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