src/corelib/io/qiodevice.cpp
branchRCL_3
changeset 4 3b1da2848fc7
parent 3 41300fa6a67c
child 7 3f74d0d4af4c
--- a/src/corelib/io/qiodevice.cpp	Tue Feb 02 00:43:10 2010 +0200
+++ b/src/corelib/io/qiodevice.cpp	Fri Feb 19 23:40:16 2010 +0200
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
@@ -965,7 +965,16 @@
 
     QByteArray result;
     qint64 readBytes = 0;
-    if (d->isSequential() || (readBytes = size()) == 0) {
+
+    // flush internal read buffer
+    if (!(d->openMode & Text) && !d->buffer.isEmpty()) {
+        result = d->buffer.readAll();
+        readBytes = result.size();
+        d->pos += readBytes;
+    }
+
+    qint64 theSize;
+    if (d->isSequential() || (theSize = size()) == 0) {
         // Size is unknown, read incrementally.
         qint64 readResult;
         do {
@@ -977,8 +986,8 @@
     } else {
         // Read it all in one go.
         // If resize fails, don't read anything.
-        result.resize(int(readBytes - d->pos));
-        readBytes = read(result.data(), result.size());
+        result.resize(int(readBytes + theSize - d->pos));
+        readBytes += read(result.data() + readBytes, result.size() - readBytes);
     }
 
     if (readBytes <= 0)