summaryrefslogtreecommitdiffstats
path: root/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp')
-rw-r--r--src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp b/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp
index 73aa6419d3..eb29b853e7 100644
--- a/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp
+++ b/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp
@@ -168,16 +168,20 @@ void QEvdevKeyboardHandler::readKeycode()
int n = 0;
forever {
- n = qt_safe_read(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
+ int result = qt_safe_read(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
- if (n == 0) {
+ if (result == 0) {
qWarning("Got EOF from the input device.");
return;
- } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) {
- qWarning("Could not read from input device: %s", strerror(errno));
- return;
- } else if (n % sizeof(buffer[0]) == 0) {
- break;
+ } else if (result < 0) {
+ if (errno != EINTR && errno != EAGAIN) {
+ qWarning("Could not read from input device: %s", strerror(errno));
+ return;
+ }
+ } else {
+ n += result;
+ if (n % sizeof(buffer[0]) == 0)
+ break;
}
}