Skip to content

Commit f0aa391

Browse files
committed
Use QIODevice::readLineInto() instead of readLine() in loops
Most of the callers of QIODevice::readLine() are reading a device line by line in a loop. Instead, use one QByteArray and modify it in every iteration using QIODevice::readLineInto(). Use a QByteArrayView instead of QByteArray when calling trimmed() as it's an expensive operation. Fixes: QTBUG-103108 Change-Id: Ic1af487a2fbf352cc21d76a41717944d034d3709 Reviewed-by: Marc Mutz <[email protected]> Reviewed-by: Thiago Macieira <[email protected]>
1 parent 69e6ae1 commit f0aa391

File tree

8 files changed

+24
-23
lines changed

8 files changed

+24
-23
lines changed

src/corelib/mimetypes/qmimeprovider.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,8 +458,8 @@ void QMimeBinaryProvider::loadMimeTypeList()
458458
// So we have to parse the plain-text files called "types".
459459
QFile file(m_directory + QStringView(u"/types"));
460460
if (file.open(QIODevice::ReadOnly)) {
461-
while (!file.atEnd()) {
462-
const QByteArray line = file.readLine();
461+
QByteArray line;
462+
while (file.readLineInto(&line)) {
463463
auto lineView = QByteArrayView(line);
464464
if (lineView.endsWith('\n'))
465465
lineView.chop(1);

src/corelib/time/qtimezoneprivate_tz.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ static QTzTimeZoneHash loadTzTimeZones()
8888
return QTzTimeZoneHash();
8989

9090
QTzTimeZoneHash zonesHash;
91-
while (!tzif.atEnd()) {
92-
const QByteArray line = tzif.readLine().trimmed();
93-
if (line.isEmpty() || line.at(0) == '#') // Ignore empty or comment
91+
QByteArray line;
92+
while (tzif.readLineInto(&line)) {
93+
QByteArrayView text = QByteArrayView(line).trimmed();
94+
if (text.isEmpty() || text.at(0) == '#') // Ignore empty or comment
9495
continue;
9596
// Data rows are tab-separated columns Region, Coordinates, ID, Optional Comments
96-
QByteArrayView text(line);
9797
int cut = text.indexOf('\t');
9898
if (Q_LIKELY(cut > 0)) {
9999
QTzTimeZone zone;

src/network/kernel/qhostinfo_unix.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ QString QHostInfo::localDomainName()
123123
return QString(); // failure
124124

125125
QString domainName;
126-
while (!resolvconf.atEnd()) {
127-
const QByteArray lineArray = resolvconf.readLine();
126+
QByteArray lineArray;
127+
while (resolvconf.readLineInto(&lineArray)) {
128128
QByteArrayView line = QByteArrayView(lineArray).trimmed();
129129
constexpr QByteArrayView domainWithSpace = "domain ";
130130
if (line.startsWith(domainWithSpace))

src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -776,11 +776,12 @@ void QIBusPlatformInputContextPrivate::createConnection()
776776
if (!file.open(QFile::ReadOnly))
777777
return;
778778

779-
QByteArray address;
779+
QByteArrayView address;
780780
int pid = -1;
781+
QByteArray lineArray;
781782

782-
while (!file.atEnd()) {
783-
QByteArray line = file.readLine().trimmed();
783+
while (file.readLineInto(&lineArray)) {
784+
QByteArrayView line = QByteArrayView(lineArray).trimmed();
784785
if (line.startsWith('#'))
785786
continue;
786787

src/testlib/qbenchmarkvalgrind.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ qint64 QBenchmarkValgrindUtils::extractResult(const QString &fileName)
6060
Q_UNUSED(openOk);
6161

6262
std::optional<qint64> val = std::nullopt;
63-
while (!file.atEnd()) {
64-
const QByteArray line = file.readLine();
63+
QByteArray line;
64+
while (file.readLineInto(&line)) {
6565
constexpr QByteArrayView tag = "summary: ";
6666
if (line.startsWith(tag)) {
6767
const auto maybeNumber = line.data() + tag.size();

src/testlib/qtestblacklist.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,9 @@ void parseBlackList()
252252
return;
253253

254254
QByteArray function;
255+
QByteArray line;
255256

256-
while (!ignored.atEnd()) {
257-
QByteArray line = ignored.readLine();
257+
while (ignored.readLineInto(&line)) {
258258
const int commentPosition = line.indexOf('#');
259259
if (commentPosition >= 0)
260260
line.truncate(commentPosition);

src/tools/androiddeployqt/main.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2837,8 +2837,9 @@ QStringList getLibraryProjectsInOutputFolder(const Options &options)
28372837

28382838
QFile file(options.outputDirectory + "/project.properties"_L1);
28392839
if (file.open(QIODevice::ReadOnly)) {
2840-
while (!file.atEnd()) {
2841-
QByteArray line = file.readLine().trimmed();
2840+
QByteArray lineArray;
2841+
while (file.readLineInto(&lineArray)) {
2842+
QByteArrayView line = QByteArrayView(lineArray).trimmed();
28422843
if (line.startsWith("android.library.reference")) {
28432844
int equalSignIndex = line.indexOf('=');
28442845
if (equalSignIndex >= 0) {
@@ -2913,8 +2914,8 @@ static bool mergeGradleProperties(const QString &path, GradleProperties properti
29132914

29142915
QFile oldFile(oldPathStr);
29152916
if (oldFile.open(QIODevice::ReadOnly)) {
2916-
while (!oldFile.atEnd()) {
2917-
QByteArray line(oldFile.readLine());
2917+
QByteArray line;
2918+
while (oldFile.readLineInto(&line)) {
29182919
QList<QByteArray> prop(line.split('='));
29192920
if (prop.size() > 1) {
29202921
GradleProperties::iterator it = properties.find(prop.at(0).trimmed());

src/tools/windeployqt/utils.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,9 @@ QMap<QString, QString> queryQtPaths(const QString &qtpathsBinary, QString *error
225225
}
226226
QFile qconfigPriFile(result.value(QStringLiteral("QT_HOST_DATA")) + QStringLiteral("/mkspecs/qconfig.pri"));
227227
if (qconfigPriFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
228-
while (true) {
229-
const QByteArray line = qconfigPriFile.readLine();
230-
if (line.isEmpty())
231-
break;
228+
QByteArray lineArray;
229+
while (qconfigPriFile.readLineInto(&lineArray)) {
230+
QByteArrayView line = QByteArrayView(lineArray);
232231
if (line.startsWith("QT_LIBINFIX")) {
233232
const int pos = line.indexOf('=');
234233
if (pos >= 0) {

0 commit comments

Comments
 (0)