Make QIODevice::seek() return false for sequential files.
Task-number: QTBUG-18173 Change-Id: Ie3a96d3a6f60995b8ba7823153778869d0c2dc58 Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
This commit is contained in:
parent
bf84d1a1fe
commit
05d980664f
@ -606,18 +606,22 @@ qint64 QIODevice::size() const
|
||||
/*!
|
||||
For random-access devices, this function sets the current position
|
||||
to \a pos, returning true on success, or false if an error occurred.
|
||||
For sequential devices, the default behavior is to do nothing and
|
||||
return false.
|
||||
For sequential devices, the default behavior is to produce a warning
|
||||
and return false.
|
||||
|
||||
When subclassing QIODevice, you must call QIODevice::seek() at the
|
||||
start of your function to ensure integrity with QIODevice's
|
||||
built-in buffer. The base implementation always returns true.
|
||||
built-in buffer.
|
||||
|
||||
\sa pos(), isSequential()
|
||||
*/
|
||||
bool QIODevice::seek(qint64 pos)
|
||||
{
|
||||
Q_D(QIODevice);
|
||||
if (d->isSequential()) {
|
||||
qWarning("QIODevice::seek: Cannot call seek on a sequential device");
|
||||
return false;
|
||||
}
|
||||
if (d->openMode == NotOpen) {
|
||||
qWarning("QIODevice::seek: The device is not open");
|
||||
return false;
|
||||
@ -633,10 +637,8 @@ bool QIODevice::seek(qint64 pos)
|
||||
#endif
|
||||
|
||||
qint64 offset = pos - d->pos;
|
||||
if (!d->isSequential()) {
|
||||
d->pos = pos;
|
||||
d->devicePos = pos;
|
||||
}
|
||||
d->pos = pos;
|
||||
d->devicePos = pos;
|
||||
|
||||
if (offset < 0
|
||||
|| offset >= qint64(d->buffer.size()))
|
||||
|
@ -373,9 +373,9 @@ void tst_QSslSocket::constructing()
|
||||
QCOMPARE(socket.readLine(0, 0), qint64(-1));
|
||||
char buf[10];
|
||||
QCOMPARE(socket.readLine(buf, sizeof(buf)), qint64(-1));
|
||||
QTest::ignoreMessage(QtWarningMsg, "QIODevice::seek: The device is not open");
|
||||
QTest::ignoreMessage(QtWarningMsg, "QIODevice::seek: Cannot call seek on a sequential device");
|
||||
QVERIFY(!socket.reset());
|
||||
QTest::ignoreMessage(QtWarningMsg, "QIODevice::seek: The device is not open");
|
||||
QTest::ignoreMessage(QtWarningMsg, "QIODevice::seek: Cannot call seek on a sequential device");
|
||||
QVERIFY(!socket.seek(2));
|
||||
QCOMPARE(socket.size(), qint64(0));
|
||||
QVERIFY(!socket.waitForBytesWritten(10));
|
||||
|
Loading…
Reference in New Issue
Block a user