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