diff options
-rw-r--r-- | src/corelib/io/qdatastream.cpp | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 9044ad74b1..1486d3630c 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -1385,32 +1385,13 @@ int QDataStream::writeRawData(const char *s, int len) int QDataStream::skipRawData(int len) { CHECK_STREAM_PRECOND(-1) + if (q_status != Ok && dev->isTransactionStarted()) + return -1; - if (dev->isSequential()) { - char buf[4096]; - int sumRead = 0; - - while (len > 0) { - int blockSize = qMin(len, (int)sizeof(buf)); - int n = readBlock(buf, blockSize); - if (n == -1) - return -1; - if (n == 0) - return sumRead; - - sumRead += n; - len -= blockSize; - } - return sumRead; - } else { - qint64 pos = dev->pos(); - qint64 size = dev->size(); - if (pos + len > size) - len = size - pos; - if (!dev->seek(pos + len)) - return -1; - return len; - } + const int skipResult = dev->skip(len); + if (skipResult != len) + setStatus(ReadPastEnd); + return skipResult; } QT_END_NAMESPACE |