fix an incorrect OpenMode flags handling in QBuffer::open()
which leads to absurd statement (QBuffer::open() == !QBuffer::isOpen()) to be true. also treat Truncate as (Truncate | WriteOnly) to satisfy lazy ones Reviewed-by: Joao Merge-request: 2612 (cherry picked from commit 6b91affb9a355e668bc9d06dee580d95230ac63a) Change-Id: I657d4d0a33f7993313fe2a1a8ba408371991717f Reviewed-on: http://codereview.qt.nokia.com/447 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Peter Hartmann <peter.hartmann@nokia.com>
This commit is contained in:
parent
c1ed7951ac
commit
fc74b4e564
@ -333,23 +333,18 @@ bool QBuffer::open(OpenMode flags)
|
||||
{
|
||||
Q_D(QBuffer);
|
||||
|
||||
if ((flags & Append) == Append)
|
||||
if ((flags & (Append | Truncate)) != 0)
|
||||
flags |= WriteOnly;
|
||||
setOpenMode(flags);
|
||||
if (!(isReadable() || isWritable())) {
|
||||
qWarning("QFile::open: File access not specified");
|
||||
if ((flags & (ReadOnly | WriteOnly)) == 0) {
|
||||
qWarning("QBuffer::open: Buffer access not specified");
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((flags & QIODevice::Truncate) == QIODevice::Truncate) {
|
||||
if ((flags & Truncate) == Truncate)
|
||||
d->buf->resize(0);
|
||||
}
|
||||
if ((flags & QIODevice::Append) == QIODevice::Append) // append to end of buffer
|
||||
seek(d->buf->size());
|
||||
else
|
||||
seek(0);
|
||||
d->ioIndex = (flags & Append) == Append ? d->buf->size() : 0;
|
||||
|
||||
return true;
|
||||
return QIODevice::open(flags);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -56,6 +56,7 @@ public:
|
||||
tst_QBuffer();
|
||||
|
||||
private slots:
|
||||
void open();
|
||||
void getSetCheck();
|
||||
void readBlock();
|
||||
void readBlockPastEnd();
|
||||
@ -104,6 +105,55 @@ tst_QBuffer::tst_QBuffer()
|
||||
{
|
||||
}
|
||||
|
||||
void tst_QBuffer::open()
|
||||
{
|
||||
QByteArray data(10, 'f');
|
||||
|
||||
QBuffer b;
|
||||
|
||||
QTest::ignoreMessage(QtWarningMsg, "QBuffer::open: Buffer access not specified");
|
||||
QVERIFY(!b.open(QIODevice::NotOpen));
|
||||
QVERIFY(!b.isOpen());
|
||||
b.close();
|
||||
|
||||
QTest::ignoreMessage(QtWarningMsg, "QBuffer::open: Buffer access not specified");
|
||||
QVERIFY(!b.open(QIODevice::Text));
|
||||
QVERIFY(!b.isOpen());
|
||||
b.close();
|
||||
|
||||
QTest::ignoreMessage(QtWarningMsg, "QBuffer::open: Buffer access not specified");
|
||||
QVERIFY(!b.open(QIODevice::Unbuffered));
|
||||
QVERIFY(!b.isOpen());
|
||||
b.close();
|
||||
|
||||
QVERIFY(b.open(QIODevice::ReadOnly));
|
||||
QVERIFY(b.isReadable());
|
||||
b.close();
|
||||
|
||||
QVERIFY(b.open(QIODevice::WriteOnly));
|
||||
QVERIFY(b.isWritable());
|
||||
b.close();
|
||||
|
||||
b.setData(data);
|
||||
QVERIFY(b.open(QIODevice::Append));
|
||||
QVERIFY(b.isWritable());
|
||||
QCOMPARE(b.size(), qint64(10));
|
||||
QCOMPARE(b.pos(), b.size());
|
||||
b.close();
|
||||
|
||||
b.setData(data);
|
||||
QVERIFY(b.open(QIODevice::Truncate));
|
||||
QVERIFY(b.isWritable());
|
||||
QCOMPARE(b.size(), qint64(0));
|
||||
QCOMPARE(b.pos(), qint64(0));
|
||||
b.close();
|
||||
|
||||
QVERIFY(b.open(QIODevice::ReadWrite));
|
||||
QVERIFY(b.isReadable());
|
||||
QVERIFY(b.isWritable());
|
||||
b.close();
|
||||
}
|
||||
|
||||
// some status() tests, too
|
||||
void tst_QBuffer::readBlock()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user