diff -r 41300fa6a67c -r 3b1da2848fc7 src/corelib/io/qiodevice.cpp --- 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)