summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2013-03-26 21:35:12 +0400
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-29 16:19:40 +0100
commit733cbdf20779cec4ccafdd9d2068d44be2268033 (patch)
treea99ab8e33e6baa6de3f7ef6816aef6fd12207ec0
parent327582d562f198ac6d028dd8fb115bf043cec7dc (diff)
downloadqtserialport-733cbdf20779cec4ccafdd9d2068d44be2268033.tar.gz
Win32: Truncate read buffer when ReadFile returns error
Previously reserved read buffer must be truncated when reading error occurs. Also reserve() method is moved down after method lookupReadCompletionNotifier(). So we get rid of an additional truncate() method when lookup can return null pointer. Change-Id: I843ff6043b31da892a93d93b8b4209ce8f10a7d2 Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r--src/serialport/qserialport_win.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp
index 0e9e18b..d062583 100644
--- a/src/serialport/qserialport_win.cpp
+++ b/src/serialport/qserialport_win.cpp
@@ -635,14 +635,14 @@ bool QSerialPortPrivate::startAsyncRead()
}
}
- char *ptr = readBuffer.reserve(bytesToRead);
-
AbstractOverlappedEventNotifier *n = lookupReadCompletionNotifier();
if (!n) {
q_ptr->setError(QSerialPort::ResourceError);
return false;
}
+ char *ptr = readBuffer.reserve(bytesToRead);
+
if (::ReadFile(descriptor, ptr, bytesToRead, NULL, n->overlappedPointer()))
return true;
@@ -651,6 +651,8 @@ bool QSerialPortPrivate::startAsyncRead()
if (error != QSerialPort::ResourceError)
error = QSerialPort::ReadError;
q_ptr->setError(error);
+
+ readBuffer.truncate(actualReadBufferSize);
return false;
}