ntdll: Make asynchronous WaitCommEvent report correct number of bytes returned.
Dmitry Timoshkov
dmitry at baikal.ru
Wed Sep 25 21:51:40 CDT 2013
---
dlls/kernel32/tests/comm.c | 2 --
dlls/ntdll/serial.c | 11 ++++++++++-
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/comm.c b/dlls/kernel32/tests/comm.c
index 4e7fee5..7ec5fc5 100644
--- a/dlls/kernel32/tests/comm.c
+++ b/dlls/kernel32/tests/comm.c
@@ -863,7 +863,6 @@ todo_wine
{
res = GetOverlappedResult(hcom, &ovl_wait, &bytes, FALSE);
ok(res, "GetOverlappedResult reported error %d\n", GetLastError());
-todo_wine
ok(bytes == sizeof(evtmask), "expected %u, written %u\n", (UINT)sizeof(evtmask), bytes);
res = TRUE;
}
@@ -2135,7 +2134,6 @@ todo_wine
last_event_time = after;
ret = GetOverlappedResult(hcom, &ovl_wait, &bytes, FALSE);
ok(ret, "GetOverlappedResult reported error %d\n", GetLastError());
-todo_wine
ok(bytes == sizeof(evtmask), "expected sizeof(evtmask), got %u\n", bytes);
ok(evtmask & EV_RXCHAR, "EV_RXCHAR should be set\n");
diff --git a/dlls/ntdll/serial.c b/dlls/ntdll/serial.c
index 5e6eaf4..db618f8 100644
--- a/dlls/ntdll/serial.c
+++ b/dlls/ntdll/serial.c
@@ -947,7 +947,16 @@ static DWORD CALLBACK wait_for_event(LPVOID arg)
}
if (needs_close) close( fd );
}
- if (commio->iosb) commio->iosb->u.Status = *commio->events ? STATUS_SUCCESS : STATUS_CANCELLED;
+ if (commio->iosb)
+ {
+ if (*commio->events)
+ {
+ commio->iosb->u.Status = STATUS_SUCCESS;
+ commio->iosb->Information = sizeof(DWORD);
+ }
+ else
+ commio->iosb->u.Status = STATUS_CANCELLED;
+ }
if (commio->hEvent) NtSetEvent(commio->hEvent, NULL);
RtlFreeHeap(GetProcessHeap(), 0, commio);
return 0;
--
1.8.3.4
More information about the wine-patches
mailing list