Skip to content

Commit

Permalink
QBitArray: DRY operator<<(QDataStream&)
Browse files Browse the repository at this point in the history
Drag the common parts out of the if-else. This also means that
qsizetype size() is no longer truncated in the assignment to quint32
len, but that doesn't fix the problem that we create invalid Qt 5
streams when the QBitArray has more than INT_MAX bits in it. That is
for a follow-up patch (which is why the {} stay for now).

As a drive-by, replace verbose constData() with data() (the QByteArray
is already const).

Pick-to: 6.7 6.6 6.5 6.2
Change-Id: Iabf816e16f823bb3959469a635a21339242f36fc
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
  • Loading branch information
marcmutz committed Feb 1, 2024
1 parent 4aa2e59 commit 741617a
Showing 1 changed file with 6 additions and 10 deletions.
16 changes: 6 additions & 10 deletions src/corelib/tools/qbitarray.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -898,19 +898,15 @@ QBitArray operator^(const QBitArray &a1, const QBitArray &a2)

QDataStream &operator<<(QDataStream &out, const QBitArray &ba)
{
const qsizetype len = ba.size();
if (out.version() < QDataStream::Qt_6_0) {
quint32 len = ba.size();
out << len;
if (len > 0)
out.writeRawData(ba.d.constData() + 1, ba.d.size() - 1);
return out;
out << quint32(len);
} else {
quint64 len = ba.size();
out << len;
if (len > 0)
out.writeRawData(ba.d.constData() + 1, ba.d.size() - 1);
return out;
out << quint64(len);
}
if (len > 0)
out.writeRawData(ba.d.data() + 1, ba.d.size() - 1);
return out;
}

/*!
Expand Down

0 comments on commit 741617a

Please sign in to comment.