From cf6ed08c98329a95dfc974fdc175a6c3d90b42ad Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Tue, 28 Jul 2009 15:54:17 +0200
Subject: [PATCH] Don't read single bytes in native mode.

---
 tests/manual/trk/adapter.cpp  | 23 +++++++++++++++++++++--
 tests/manual/trk/launcher.cpp | 23 +++++++++++++++++++++--
 2 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/tests/manual/trk/adapter.cpp b/tests/manual/trk/adapter.cpp
index 70910f8ed8a..054aab91a71 100644
--- a/tests/manual/trk/adapter.cpp
+++ b/tests/manual/trk/adapter.cpp
@@ -41,6 +41,25 @@
 
 #if USE_NATIVE
 #include <windows.h>
+
+// Non-blocking replacement for win-api ReadFile function
+BOOL WINAPI TryReadFile(HANDLE          hFile,
+                        LPVOID          lpBuffer,
+                        DWORD           nNumberOfBytesToRead,
+                        LPDWORD         lpNumberOfBytesRead,
+                        LPOVERLAPPED    lpOverlapped)
+{
+    COMSTAT comStat;
+    if(!ClearCommError(hFile, NULL, &comStat)){
+        qDebug() << "ClearCommError() failed";
+        return FALSE;
+    }
+    return ReadFile(hFile,
+                    lpBuffer,
+                    qMin(comStat.cbInQue, nNumberOfBytesToRead),
+                    lpNumberOfBytesRead,
+                    lpOverlapped);
+}
 #endif
 
 #ifdef Q_OS_UNIX
@@ -873,11 +892,11 @@ void Adapter::tryTrkRead()
     //        << stringFromArray(m_trkReadQueue);
 
 #if USE_NATIVE
-    const DWORD BUFFERSIZE = 1;
+    const DWORD BUFFERSIZE = 1024;
     char buffer[BUFFERSIZE];
     DWORD charsRead;
 
-    while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
+    while (TryReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
         m_trkReadQueue.append(buffer, charsRead);
         if (isValidTrkResult(m_trkReadQueue))
             break;
diff --git a/tests/manual/trk/launcher.cpp b/tests/manual/trk/launcher.cpp
index 230ce91bf66..dc3cbded0db 100644
--- a/tests/manual/trk/launcher.cpp
+++ b/tests/manual/trk/launcher.cpp
@@ -41,6 +41,25 @@
 
 #if USE_NATIVE
 #include <windows.h>
+
+// Non-blocking replacement for win-api ReadFile function
+BOOL WINAPI TryReadFile(HANDLE          hFile,
+                        LPVOID          lpBuffer,
+                        DWORD           nNumberOfBytesToRead,
+                        LPDWORD         lpNumberOfBytesRead,
+                        LPOVERLAPPED    lpOverlapped)
+{
+    COMSTAT comStat;
+    if(!ClearCommError(hFile, NULL, &comStat)){
+        qDebug() << "ClearCommError() failed";
+        return FALSE;
+    }
+    return ReadFile(hFile,
+                    lpBuffer,
+                    qMin(comStat.cbInQue, nNumberOfBytesToRead),
+                    lpNumberOfBytesRead,
+                    lpOverlapped);
+}
 #endif
 
 #ifdef Q_OS_UNIX
@@ -342,11 +361,11 @@ void Adapter::trkWrite(const TrkMessage &msg)
 void Adapter::tryTrkRead()
 {
 #if USE_NATIVE
-    const DWORD BUFFERSIZE = 1;
+    const DWORD BUFFERSIZE = 1024;
     char buffer[BUFFERSIZE];
     DWORD charsRead;
 
-    while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
+    while (TryReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
         m_trkReadQueue.append(buffer, charsRead);
         if (isValidTrkResult(m_trkReadQueue))
             break;
-- 
GitLab