Module: wine Branch: master Commit: acb43cfef2c114c4da5c57675379a92bc9cba8f0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=acb43cfef2c114c4da5c576753...
Author: Alexandre Julliard julliard@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);