summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp13
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp16
-rw-r--r--src/corelib/io/qabstractfileengine.cpp39
-rw-r--r--src/corelib/io/qdir.cpp37
-rw-r--r--src/corelib/io/qfilesystemiterator_p.h1
-rw-r--r--src/corelib/io/qfsfileengine.cpp1
-rw-r--r--src/corelib/io/qstorageinfo_linux.cpp23
-rw-r--r--src/corelib/io/qstorageinfo_unix.cpp1
-rw-r--r--src/corelib/io/qtemporarydir.cpp1
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp10
-rw-r--r--src/corelib/time/qtimezoneprivate_tz.cpp6
-rw-r--r--src/gui/itemmodels/qfileinfogatherer.cpp10
-rw-r--r--src/gui/itemmodels/qfilesystemmodel.h1
-rw-r--r--src/network/access/qnetworkdiskcache.cpp10
-rw-r--r--src/network/ssl/qsslcertificate.cpp11
-rw-r--r--src/plugins/tls/openssl/qtlsbackend_openssl.cpp15
-rw-r--r--src/testlib/qtestcase.cpp29
-rw-r--r--src/tools/androiddeployqt/main.cpp22
-rw-r--r--src/tools/bootstrap/CMakeLists.txt2
-rw-r--r--src/tools/rcc/rcc.cpp12
-rw-r--r--src/tools/windeployqt/qtmoduleinfo.cpp8
21 files changed, 123 insertions, 145 deletions
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index 1e21afd1c2..b5df617927 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -6,7 +6,7 @@
#include <qregularexpression.h>
#include <qdir.h>
-#include <qdiriterator.h>
+#include <qdirlisting.h>
#include <qset.h>
#include <time.h>
@@ -314,16 +314,15 @@ void NmakeMakefileGenerator::writeImplicitRulesPart(QTextStream &t)
const QStringList sourceFilesFilter = sourceFilesForImplicitRulesFilter();
QStringList fixifiedSourceDirs = fileFixify(QList<QString>(source_directories.constBegin(), source_directories.constEnd()), FileFixifyAbsolute);
fixifiedSourceDirs.removeDuplicates();
+ constexpr auto filters = QDir::Files | QDir::NoDotAndDotDot;
for (const QString &sourceDir : std::as_const(fixifiedSourceDirs)) {
- QDirIterator dit(sourceDir, sourceFilesFilter, QDir::Files | QDir::NoDotAndDotDot);
- while (dit.hasNext()) {
- const QFileInfo fi = dit.nextFileInfo();
- QString &duplicate = fileNames[fi.completeBaseName()];
+ for (const auto &dirEntry : QDirListing(sourceDir, sourceFilesFilter, filters)) {
+ QString &duplicate = fileNames[dirEntry.completeBaseName()];
if (duplicate.isNull()) {
- duplicate = fi.filePath();
+ duplicate = dirEntry.filePath();
} else {
warn_msg(WarnLogic, "%s conflicts with %s", qPrintable(duplicate),
- qPrintable(fi.filePath()));
+ qPrintable(dirEntry.filePath()));
duplicatesFound = true;
}
}
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index ac50253a44..2192535867 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -8,7 +8,7 @@
#include <ioutils.h>
#include <qdir.h>
-#include <qdiriterator.h>
+#include <qdirlisting.h>
#include <qcryptographichash.h>
#include <qhash.h>
#include <quuid.h>
@@ -1293,18 +1293,16 @@ void VcprojGenerator::initDeploymentTool()
}
int pathSize = searchPath.size();
- QDirIterator iterator(searchPath, QStringList() << nameFilter
- , QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks
- , QDirIterator::Subdirectories);
+ constexpr auto filters = QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks;
+ using F = QDirListing::IteratorFlag;
+ QDirListing dirList(searchPath, QStringList{nameFilter}, filters, F::Recursive);
// foreach dirIterator-entry in d
- while(iterator.hasNext()) {
- iterator.next();
-
- QString absoluteItemPath = Option::fixPathToTargetOS(QFileInfo(iterator.filePath()).absolutePath());
+ for (const auto &dirEntry : dirList) {
+ const QString absoluteItemPath = Option::fixPathToTargetOS(dirEntry.absolutePath());
// Identify if it is just another subdir
int diffSize = absoluteItemPath.size() - pathSize;
// write out rules
- conf.deployment.AdditionalFiles += iterator.fileName()
+ conf.deployment.AdditionalFiles += dirEntry.fileName()
+ "|" + absoluteItemPath
+ "|" + itemDevicePath + (diffSize ? (absoluteItemPath.right(diffSize)) : QLatin1String(""))
+ "|0;";
diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp
index 25dfe79d64..c9b792c5d2 100644
--- a/src/corelib/io/qabstractfileengine.cpp
+++ b/src/corelib/io/qabstractfileengine.cpp
@@ -10,7 +10,7 @@
#include "qreadwritelock.h"
#include "qvariant.h"
// built-in handlers
-#include "qdiriterator.h"
+#include "qdirlisting.h"
#include "qstringbuilder.h"
#include <QtCore/private/qfilesystementry_p.h>
@@ -590,11 +590,8 @@ bool QAbstractFileEngine::isRelativePath() const
QStringList QAbstractFileEngine::entryList(QDir::Filters filters, const QStringList &filterNames) const
{
QStringList ret;
- QDirIterator it(fileName(), filterNames, filters);
- while (it.hasNext()) {
- it.next();
- ret << it.fileName();
- }
+ for (const auto &dirEntry : QDirListing(fileName(), filterNames, filters))
+ ret.emplace_back(dirEntry.fileName());
return ret;
}
@@ -826,11 +823,12 @@ bool QAbstractFileEngine::cloneTo(QAbstractFileEngine *target)
\internal
If all you want is to iterate over entries in a directory, see
- QDirIterator instead. This class is only for custom file engine authors.
+ QDirListing instead. This class is useful only for custom file engine
+ authors.
QAbstractFileEngineIterator is a unidirectional single-use virtual
- iterator that plugs into QDirIterator, providing transparent proxy
- iteration for custom file engines.
+ iterator that plugs into QDirListing, providing transparent proxy
+ iteration for custom file engines (for example, QResourceFileEngine).
You can subclass QAbstractFileEngineIterator to provide an iterator when
writing your own file engine. To plug the iterator into your file system,
@@ -869,7 +867,7 @@ bool QAbstractFileEngine::cloneTo(QAbstractFileEngine *target)
Note: QAbstractFileEngineIterator does not deal with QDir::IteratorFlags;
it simply returns entries for a single directory.
- \sa QDirIterator
+ \sa QDirListing
*/
/*!
@@ -911,15 +909,18 @@ QAbstractFileEngineIterator::QAbstractFileEngineIterator(QDir::Filters filters,
/*!
Destroys the QAbstractFileEngineIterator.
- \sa QDirIterator
+ \sa QDirListing
*/
QAbstractFileEngineIterator::~QAbstractFileEngineIterator()
{
}
/*!
- Returns the path for this iterator. QDirIterator is responsible for
- assigning this path; it cannot change during the iterator's lifetime.
+
+ Returns the path for this iterator. It can be set using setPath().
+ Typically the path is passed to beginEntryList(), which sets the path.
+
+ \note The path should't be changed once iteration begins.
\sa nameFilters(), filters()
*/
@@ -932,7 +933,7 @@ QString QAbstractFileEngineIterator::path() const
\internal
Sets the iterator path to \a path. This function is called from within
- QDirIterator.
+ QDirListing.
*/
void QAbstractFileEngineIterator::setPath(const QString &path)
{
@@ -1032,8 +1033,6 @@ QVariant QAbstractFileEngineIterator::entryInfo(EntryInfoType type) const
optimize its performance.
Reimplement this function in a subclass to advance the iterator.
-
- \sa QDirIterator::next()
*/
/*!
@@ -1042,19 +1041,17 @@ QVariant QAbstractFileEngineIterator::entryInfo(EntryInfoType type) const
This pure virtual function returns \c true if there is at least one more
entry in the current directory (i.e., the iterator path is valid and
accessible, and the iterator has not reached the end of the entry list).
-
- \sa QDirIterator::hasNext()
*/
/*!
Returns an instance of a QAbstractFileEngineIterator using \a filters for
entry filtering and \a filterNames for name filtering. This function is
- called by QDirIterator to initiate directory iteration.
+ called by QDirListing to initiate directory iteration.
- QDirIterator takes ownership of the returned instance, and deletes it when
+ QDirListing takes ownership of the returned instance, and deletes it when
it's done.
- \sa QDirIterator
+ \sa QDirListing
*/
QAbstractFileEngine::Iterator *QAbstractFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index d03800f4f8..2dcd119723 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -9,7 +9,7 @@
#ifndef QT_NO_DEBUG_STREAM
#include "qdebug.h"
#endif
-#include "qdiriterator.h"
+#include "qdirlisting.h"
#include "qdatetime.h"
#include "qstring.h"
#if QT_CONFIG(regularexpression)
@@ -346,9 +346,8 @@ inline void QDirPrivate::initFileLists(const QDir &dir) const
QMutexLocker locker(&fileCache.mutex);
if (!fileCache.fileListsInitialized) {
QFileInfoList l;
- QDirIterator it(dir);
- while (it.hasNext())
- l.append(it.nextFileInfo());
+ for (const auto &dirEntry : QDirListing(dir))
+ l.emplace_back(dirEntry.fileInfo());
sortFileList(sort, l, &fileCache.files, &fileCache.fileInfos);
fileCache.fileListsInitialized = true;
@@ -1427,18 +1426,16 @@ QStringList QDir::entryList(const QStringList &nameFilters, Filters filters,
}
}
- QDirIterator it(d->dirEntry.filePath(), nameFilters, filters);
+ QDirListing dirList(d->dirEntry.filePath(), nameFilters, filters);
QStringList ret;
if (needsSorting) {
QFileInfoList l;
- while (it.hasNext())
- l.append(it.nextFileInfo());
+ for (const auto &dirEntry : dirList)
+ l.emplace_back(dirEntry.fileInfo());
d->sortFileList(sort, l, &ret, nullptr);
} else {
- while (it.hasNext()) {
- it.next();
- ret.append(it.fileName());
- }
+ for (const auto &dirEntry : dirList)
+ ret.emplace_back(dirEntry.fileName());
}
return ret;
}
@@ -1475,9 +1472,8 @@ QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, Filters filter
}
QFileInfoList l;
- QDirIterator it(d->dirEntry.filePath(), nameFilters, filters);
- while (it.hasNext())
- l.append(it.nextFileInfo());
+ for (const auto &dirEntry : QDirListing(d->dirEntry.filePath(), nameFilters, filters))
+ l.emplace_back(dirEntry.fileInfo());
QFileInfoList ret;
d->sortFileList(sort, l, nullptr, &ret);
return ret;
@@ -1646,12 +1642,11 @@ bool QDir::removeRecursively()
bool success = true;
const QString dirPath = path();
// not empty -- we must empty it first
- QDirIterator di(dirPath, QDir::AllEntries | QDir::Hidden | QDir::System | QDir::NoDotAndDotDot);
- while (di.hasNext()) {
- const QFileInfo fi = di.nextFileInfo();
- const QString &filePath = di.filePath();
+ constexpr auto dirFilters = QDir::AllEntries | QDir::Hidden | QDir::System | QDir::NoDotAndDotDot;
+ for (const auto &dirEntry : QDirListing(dirPath, dirFilters)) {
+ const QString &filePath = dirEntry.filePath();
bool ok;
- if (fi.isDir() && !fi.isSymLink()) {
+ if (dirEntry.isDir() && !dirEntry.isSymLink()) {
ok = QDir(filePath).removeRecursively(); // recursive
} else {
ok = QFile::remove(filePath);
@@ -1969,8 +1964,8 @@ bool QDir::exists(const QString &name) const
bool QDir::isEmpty(Filters filters) const
{
Q_D(const QDir);
- QDirIterator it(d->dirEntry.filePath(), d->nameFilters, filters);
- return !it.hasNext();
+ QDirListing dirList(d->dirEntry.filePath(), d->nameFilters, filters);
+ return dirList.cbegin() == dirList.cend();
}
/*!
diff --git a/src/corelib/io/qfilesystemiterator_p.h b/src/corelib/io/qfilesystemiterator_p.h
index 5687da115e..2973b85cd2 100644
--- a/src/corelib/io/qfilesystemiterator_p.h
+++ b/src/corelib/io/qfilesystemiterator_p.h
@@ -20,7 +20,6 @@
#ifndef QT_NO_FILESYSTEMITERATOR
#include <QtCore/qdir.h>
-#include <QtCore/qdiriterator.h>
#include <QtCore/qstringlist.h>
#include <QtCore/private/qfilesystementry_p.h>
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index 3e96a5a6e9..66026356de 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -6,7 +6,6 @@
#include "qfsfileengine_iterator_p.h"
#include "qfilesystemengine_p.h"
#include "qdatetime.h"
-#include "qdiriterator.h"
#include "qset.h"
#include <QtCore/qdebug.h>
diff --git a/src/corelib/io/qstorageinfo_linux.cpp b/src/corelib/io/qstorageinfo_linux.cpp
index db69903c48..7d9828fa3b 100644
--- a/src/corelib/io/qstorageinfo_linux.cpp
+++ b/src/corelib/io/qstorageinfo_linux.cpp
@@ -6,7 +6,7 @@
#include "qstorageinfo_linux_p.h"
-#include "qdiriterator.h"
+#include "qdirlisting.h"
#include <private/qcore_unix_p.h>
#include <private/qtools_p.h>
@@ -99,13 +99,13 @@ static inline quint64 retrieveDeviceId(const QByteArray &device, quint64 deviceI
return st.st_rdev;
}
-static QDirIterator devicesByLabel()
+static QDirListing devicesByLabel()
{
static const char pathDiskByLabel[] = "/dev/disk/by-label";
static constexpr auto LabelFileFilter =
QDir::AllEntries | QDir::System | QDir::Hidden | QDir::NoDotAndDotDot;
- return QDirIterator(QLatin1StringView(pathDiskByLabel), LabelFileFilter);
+ return QDirListing(QLatin1StringView(pathDiskByLabel), LabelFileFilter);
}
static inline auto retrieveLabels()
@@ -116,13 +116,11 @@ static inline auto retrieveLabels()
};
QList<Entry> result;
- QDirIterator it = devicesByLabel();
- while (it.hasNext()) {
- QFileInfo fileInfo = it.nextFileInfo();
- quint64 deviceId = retrieveDeviceId(QFile::encodeName(fileInfo.filePath()));
+ for (const auto &dirEntry : devicesByLabel()) {
+ quint64 deviceId = retrieveDeviceId(QFile::encodeName(dirEntry.filePath()));
if (!deviceId)
continue;
- result.emplaceBack(Entry{ decodeFsEncString(fileInfo.fileName()), deviceId });
+ result.emplaceBack(Entry{ decodeFsEncString(dirEntry.fileName()), deviceId });
}
return result;
}
@@ -153,12 +151,9 @@ static inline QString retrieveLabel(const QStorageInfoPrivate &d, quint64 device
if (!deviceId)
return QString();
- QDirIterator it = devicesByLabel();
- while (it.hasNext()) {
- QFileInfo fileInfo = it.nextFileInfo();
- QString name = fileInfo.fileName();
- if (retrieveDeviceId(QFile::encodeName(fileInfo.filePath())) == deviceId)
- return decodeFsEncString(std::move(name));
+ for (const auto &dirEntry : devicesByLabel()) {
+ if (retrieveDeviceId(QFile::encodeName(dirEntry.filePath())) == deviceId)
+ return decodeFsEncString(dirEntry.fileName());
}
return QString();
}
diff --git a/src/corelib/io/qstorageinfo_unix.cpp b/src/corelib/io/qstorageinfo_unix.cpp
index 71775b7800..9df098a389 100644
--- a/src/corelib/io/qstorageinfo_unix.cpp
+++ b/src/corelib/io/qstorageinfo_unix.cpp
@@ -5,7 +5,6 @@
#include "qstorageinfo_p.h"
-#include <QtCore/qdiriterator.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qtextstream.h>
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp
index c4a414783f..719e86208b 100644
--- a/src/corelib/io/qtemporarydir.cpp
+++ b/src/corelib/io/qtemporarydir.cpp
@@ -7,7 +7,6 @@
#ifndef QT_NO_TEMPORARYFILE
#include "qdebug.h"
-#include "qdiriterator.h"
#include "qplatformdefs.h"
#include "qrandom.h"
#include "private/qtemporaryfile_p.h"
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index 556bfa3f1e..87eaad3f7a 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -13,7 +13,7 @@
#include "qcbormap.h"
#include "qcborstreamreader.h"
#include "qcborvalue.h"
-#include "qdiriterator.h"
+#include "qdirlisting.h"
#include "qfileinfo.h"
#include "qjsonarray.h"
#include "qjsondocument.h"
@@ -303,7 +303,7 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path)
qCDebug(lcFactoryLoader) << "checking directory path" << path << "...";
- QDirIterator plugins(path,
+ QDirListing plugins(path,
#if defined(Q_OS_WIN)
QStringList(QStringLiteral("*.dll")),
#elif defined(Q_OS_ANDROID)
@@ -311,8 +311,8 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path)
#endif
QDir::Files);
- while (plugins.hasNext()) {
- QString fileName = plugins.next();
+ for (const auto &dirEntry : plugins) {
+ const QString &fileName = dirEntry.fileName();
#ifdef Q_OS_DARWIN
const bool isDebugPlugin = fileName.endsWith("_debug.dylib"_L1);
const bool isDebugLibrary =
@@ -337,7 +337,7 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path)
Q_TRACE(QFactoryLoader_update, fileName);
QLibraryPrivate::UniquePtr library;
- library.reset(QLibraryPrivate::findOrCreate(QFileInfo(fileName).canonicalFilePath()));
+ library.reset(QLibraryPrivate::findOrCreate(dirEntry.canonicalFilePath()));
if (!library->isPlugin()) {
qCDebug(lcFactoryLoader) << library->errorString << Qt::endl
<< " not a plugin";
diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp
index afa7cf0370..b6a7d1418c 100644
--- a/src/corelib/time/qtimezoneprivate_tz.cpp
+++ b/src/corelib/time/qtimezoneprivate_tz.cpp
@@ -10,7 +10,7 @@
#include <QtCore/QDataStream>
#include <QtCore/QDateTime>
-#include <QtCore/QDirIterator>
+#include <QtCore/QDirListing>
#include <QtCore/QFile>
#include <QtCore/QCache>
#include <QtCore/QMap>
@@ -121,9 +121,7 @@ static QTzTimeZoneHash loadTzTimeZones()
const qsizetype cut = path.lastIndexOf(u'/');
Q_ASSERT(cut > 0);
const QDir zoneDir = QDir(path.first(cut));
- QDirIterator zoneFiles(zoneDir, QDirIterator::Subdirectories);
- while (zoneFiles.hasNext()) {
- const QFileInfo info = zoneFiles.nextFileInfo();
+ for (const auto &info : QDirListing(zoneDir, QDirListing::IteratorFlag::Recursive)) {
if (!(info.isFile() || info.isSymLink()))
continue;
const QString name = zoneDir.relativeFilePath(info.filePath());
diff --git a/src/gui/itemmodels/qfileinfogatherer.cpp b/src/gui/itemmodels/qfileinfogatherer.cpp
index be4d828b99..41fb0a0db5 100644
--- a/src/gui/itemmodels/qfileinfogatherer.cpp
+++ b/src/gui/itemmodels/qfileinfogatherer.cpp
@@ -4,7 +4,7 @@
#include "qfileinfogatherer_p.h"
#include <qcoreapplication.h>
#include <qdebug.h>
-#include <qdiriterator.h>
+#include <qdirlisting.h>
#include <private/qabstractfileiconprovider_p.h>
#include <private/qfileinfo_p.h>
#ifndef Q_OS_WIN
@@ -419,9 +419,11 @@ void QFileInfoGatherer::getFileInfos(const QString &path, const QStringList &fil
QStringList allFiles;
if (files.isEmpty()) {
- QDirIterator dirIt(path, QDir::AllEntries | QDir::System | QDir::Hidden);
- while (!isInterruptionRequested() && dirIt.hasNext()) {
- fileInfo = dirIt.nextFileInfo();
+ constexpr auto dirFilters = QDir::AllEntries | QDir::System | QDir::Hidden;
+ for (const auto &dirEntry : QDirListing(path, dirFilters)) {
+ if (isInterruptionRequested())
+ break;
+ fileInfo = dirEntry.fileInfo();
fileInfo.stat();
allFiles.append(fileInfo.fileName());
fetch(fileInfo, base, firstTime, updatedFiles, path);
diff --git a/src/gui/itemmodels/qfilesystemmodel.h b/src/gui/itemmodels/qfilesystemmodel.h
index 70e5cc2024..17bce1946f 100644
--- a/src/gui/itemmodels/qfilesystemmodel.h
+++ b/src/gui/itemmodels/qfilesystemmodel.h
@@ -9,7 +9,6 @@
#include <QtCore/qpair.h>
#include <QtCore/qdir.h>
#include <QtGui/qicon.h>
-#include <QtCore/qdiriterator.h>
QT_REQUIRE_CONFIG(filesystemmodel);
diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp
index 577d423a01..c883a61886 100644
--- a/src/network/access/qnetworkdiskcache.cpp
+++ b/src/network/access/qnetworkdiskcache.cpp
@@ -12,7 +12,7 @@
#include <qdir.h>
#include <qdatastream.h>
#include <qdatetime.h>
-#include <qdiriterator.h>
+#include <qdirlisting.h>
#include <qurl.h>
#include <qcryptographichash.h>
#include <qdebug.h>
@@ -478,7 +478,6 @@ qint64 QNetworkDiskCache::expire()
d->lastItem.reset();
const QDir::Filters filters = QDir::AllDirs | QDir:: Files | QDir::NoDotAndDotDot;
- QDirIterator it(cacheDirectory(), filters, QDirIterator::Subdirectories);
struct CacheItem
{
@@ -488,11 +487,12 @@ qint64 QNetworkDiskCache::expire()
};
std::vector<CacheItem> cacheItems;
qint64 totalSize = 0;
- while (it.hasNext()) {
- QFileInfo info = it.nextFileInfo();
- if (!info.fileName().endsWith(CACHE_POSTFIX))
+ using F = QDirListing::IteratorFlag;
+ for (const auto &dirEntry : QDirListing(cacheDirectory(), filters, F::Recursive)) {
+ if (!dirEntry.fileName().endsWith(CACHE_POSTFIX))
continue;
+ const QFileInfo &info = dirEntry.fileInfo();
QDateTime fileTime = info.birthTime(QTimeZone::UTC);
if (!fileTime.isValid())
fileTime = info.metadataChangeTime(QTimeZone::UTC);
diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp
index 2fc43d0bfa..9878c603b6 100644
--- a/src/network/ssl/qsslcertificate.cpp
+++ b/src/network/ssl/qsslcertificate.cpp
@@ -110,7 +110,7 @@
#endif
#include <QtCore/qdir.h>
-#include <QtCore/qdiriterator.h>
+#include <QtCore/qdirlisting.h>
#include <QtCore/qfile.h>
QT_BEGIN_NAMESPACE
@@ -680,9 +680,12 @@ QList<QSslCertificate> QSslCertificate::fromPath(const QString &path,
QRegularExpression pattern(QRegularExpression::anchoredPattern(sourcePath));
#endif
- QDirIterator it(pathPrefixString, QDir::Files, QDirIterator::FollowSymlinks | QDirIterator::Subdirectories);
- while (it.hasNext()) {
- QString filePath = startIndex == 0 ? it.next() : it.next().mid(startIndex);
+ using F = QDirListing::IteratorFlag;
+ constexpr auto iterFlags = F::FollowSymlinks | F::Recursive;
+ for (const auto &dirEntry : QDirListing(pathPrefixString, QDir::Files, iterFlags)) {
+ QString filePath = dirEntry.filePath();
+ if (startIndex > 0)
+ filePath.remove(0, startIndex);
#if QT_CONFIG(regularexpression)
if (!pattern.match(filePath).hasMatch())
diff --git a/src/plugins/tls/openssl/qtlsbackend_openssl.cpp b/src/plugins/tls/openssl/qtlsbackend_openssl.cpp
index 02f27ce931..d73515724b 100644
--- a/src/plugins/tls/openssl/qtlsbackend_openssl.cpp
+++ b/src/plugins/tls/openssl/qtlsbackend_openssl.cpp
@@ -17,7 +17,7 @@
#include <QtNetwork/qssl.h>
#include <QtCore/qdir.h>
-#include <QtCore/qdiriterator.h>
+#include <QtCore/qdirlisting.h>
#include <QtCore/qlist.h>
#include <QtCore/qmutex.h>
#include <QtCore/qscopeguard.h>
@@ -204,11 +204,11 @@ void QTlsBackendOpenSSL::ensureCiphersAndCertsLoaded() const
#elif defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)
// check whether we can enable on-demand root-cert loading (i.e. check whether the sym links are there)
const QList<QByteArray> dirs = QSslSocketPrivate::unixRootCertDirectories();
- QStringList symLinkFilter;
- symLinkFilter << "[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].[0-9]"_L1;
+ const QStringList symLinkFilter{
+ u"[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].[0-9]"_s};
for (const auto &dir : dirs) {
- QDirIterator iterator(QLatin1StringView(dir), symLinkFilter, QDir::Files);
- if (iterator.hasNext()) {
+ QDirListing dirList(QString::fromLatin1(dir), symLinkFilter, QDir::Files);
+ if (dirList.cbegin() != dirList.cend()) { // Not empty
QSslSocketPrivate::setRootCertOnDemandLoadingSupported(true);
break;
}
@@ -394,10 +394,9 @@ QList<QSslCertificate> systemCaCertificates()
currentDir.setNameFilters(QStringList{QStringLiteral("*.pem"), QStringLiteral("*.crt")});
for (const auto &directory : directories) {
currentDir.setPath(QLatin1StringView(directory));
- QDirIterator it(currentDir);
- while (it.hasNext()) {
+ for (const auto &dirEntry : QDirListing(currentDir)) {
// use canonical path here to not load the same certificate twice if symlinked
- certFiles.insert(it.nextFileInfo().canonicalFilePath());
+ certFiles.insert(dirEntry.canonicalFilePath());
}
}
for (const QString& file : std::as_const(certFiles))
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index b553c02908..b9a4c9aaf1 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -10,7 +10,7 @@
#include <QtCore/qcoreapplication.h>
#include <QtCore/qdebug.h>
#include <QtCore/qdir.h>
-#include <QtCore/qdiriterator.h>
+#include <QtCore/qdirlisting.h>
#include <QtCore/qfile.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qfloat16.h>
@@ -3010,22 +3010,18 @@ QSharedPointer<QTemporaryDir> QTest::qExtractTestData(const QString &dirName)
return result;
}
- QDirIterator it(resourcePath, QDirIterator::Subdirectories);
- if (!it.hasNext()) {
- qWarning("Resource directory '%s' is empty.", qPrintable(resourcePath));
- return result;
- }
-
- while (it.hasNext()) {
- QFileInfo fileInfo = it.nextFileInfo();
-
- if (!fileInfo.isDir()) {
- const QString destination = dataPath + u'/' + QStringView{fileInfo.filePath()}.mid(resourcePath.size());
+ bool isResourceDirEmpty = true;
+ for (const auto &dirEntry : QDirListing(resourcePath, QDirListing::IteratorFlag::Recursive)) {
+ isResourceDirEmpty = false;
+ if (!dirEntry.isDir()) {
+ const QString &filePath = dirEntry.filePath();
+ const QString destination =
+ dataPath + u'/' + QStringView{filePath}.sliced(resourcePath.size());
QFileInfo destinationFileInfo(destination);
QDir().mkpath(destinationFileInfo.path());
- QFile file(fileInfo.filePath());
+ QFile file(filePath);
if (!file.copy(destination)) {
- qWarning("Failed to copy '%ls': %ls.", qUtf16Printable(fileInfo.filePath()),
+ qWarning("Failed to copy '%ls': %ls.", qUtf16Printable(filePath),
qUtf16Printable(file.errorString()));
return result;
}
@@ -3039,6 +3035,11 @@ QSharedPointer<QTemporaryDir> QTest::qExtractTestData(const QString &dirName)
}
}
+ if (isResourceDirEmpty) {
+ qWarning("Resource directory '%s' is empty.", qPrintable(resourcePath));
+ return result;
+ }
+
result = std::move(tempDir);
return result;
diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp
index 67193ac19c..20030bd3bd 100644
--- a/src/tools/androiddeployqt/main.cpp
+++ b/src/tools/androiddeployqt/main.cpp
@@ -13,7 +13,7 @@
#include <QXmlStreamReader>
#include <QStandardPaths>
#include <QUuid>
-#include <QDirIterator>
+#include <QDirListing>
#include <QElapsedTimer>
#include <QRegularExpression>
#include <QSettings>
@@ -1222,6 +1222,7 @@ bool readInputFile(Options *options)
}
{
+ using ItFlag = QDirListing::IteratorFlag;
const QJsonValue deploymentDependencies = jsonObject.value("deployment-dependencies"_L1);
if (!deploymentDependencies.isUndefined()) {
QString deploymentDependenciesString = deploymentDependencies.toString();
@@ -1230,11 +1231,9 @@ bool readInputFile(Options *options)
QString path = options->qtInstallDirectory + QChar::fromLatin1('/');
path += dependency;
if (QFileInfo(path).isDir()) {
- QDirIterator iterator(path, QDirIterator::Subdirectories);
- while (iterator.hasNext()) {
- iterator.next();
- if (iterator.fileInfo().isFile()) {
- QString subPath = iterator.filePath();
+ for (const auto &dirEntry : QDirListing(path, ItFlag::Recursive)) {
+ if (dirEntry.isFile()) {
+ const QString subPath = dirEntry.filePath();
auto arch = fileArchitecture(*options, subPath);
if (!arch.isEmpty()) {
options->qtDependencies[arch].append(QtDependency(subPath.mid(options->qtInstallDirectory.size() + 1),
@@ -2724,12 +2723,11 @@ static bool mergeGradleProperties(const QString &path, GradleProperties properti
void checkAndWarnGradleLongPaths(const QString &outputDirectory)
{
QStringList longFileNames;
- QDirIterator it(outputDirectory, QStringList(QStringLiteral("*.java")), QDir::Files,
- QDirIterator::Subdirectories);
- while (it.hasNext()) {
- const QString &filePath = it.next();
- if (filePath.size() >= MAX_PATH)
- longFileNames.append(filePath);
+ using F = QDirListing::IteratorFlag;
+ for (const auto &dirEntry : QDirListing(outputDirectory, QStringList(u"*.java"_s),
+ QDir::Files, F::Recursive)) {
+ if (dirEntry.size() >= MAX_PATH)
+ longFileNames.append(dirEntry.filePath());
}
if (!longFileNames.isEmpty()) {
diff --git a/src/tools/bootstrap/CMakeLists.txt b/src/tools/bootstrap/CMakeLists.txt
index 318c0f7618..9c8b16037c 100644
--- a/src/tools/bootstrap/CMakeLists.txt
+++ b/src/tools/bootstrap/CMakeLists.txt
@@ -27,7 +27,7 @@ qt_internal_extend_target(Bootstrap
../../corelib/io/qbuffer.cpp
../../corelib/io/qdebug.cpp
../../corelib/io/qdir.cpp
- ../../corelib/io/qdiriterator.cpp
+ ../../corelib/io/qdirlisting.cpp
../../corelib/io/qfile.cpp
../../corelib/io/qfiledevice.cpp
../../corelib/io/qfileinfo.cpp
diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp
index 3c8e6aac6b..14c4979b6d 100644
--- a/src/tools/rcc/rcc.cpp
+++ b/src/tools/rcc/rcc.cpp
@@ -8,7 +8,7 @@
#include <qdatetime.h>
#include <qdebug.h>
#include <qdir.h>
-#include <qdiriterator.h>
+#include <qdirlisting.h>
#include <qfile.h>
#include <qiodevice.h>
#include <qlocale.h>
@@ -634,12 +634,12 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
alias += slash;
QStringList filePaths;
- QDirIterator it(dir, QDirIterator::FollowSymlinks|QDirIterator::Subdirectories);
- while (it.hasNext()) {
- it.next();
- if (it.fileName() == "."_L1 || it.fileName() == ".."_L1)
+ using F = QDirListing::IteratorFlag;
+ for (const auto &entry : QDirListing(dir, F::FollowSymlinks | F::Recursive)) {
+ const QString &fileName = entry.fileName();
+ if (fileName == "."_L1 || fileName == ".."_L1)
continue;
- filePaths.append(it.filePath());
+ filePaths.emplace_back(entry.filePath());
}
// make rcc output deterministic
diff --git a/src/tools/windeployqt/qtmoduleinfo.cpp b/src/tools/windeployqt/qtmoduleinfo.cpp
index ebef4f1de4..b928a64478 100644
--- a/src/tools/windeployqt/qtmoduleinfo.cpp
+++ b/src/tools/windeployqt/qtmoduleinfo.cpp
@@ -4,7 +4,7 @@
#include "qtmoduleinfo.h"
#include "utils.h"
-#include <QDirIterator>
+#include <QDirListing>
#include <QJsonDocument>
#include <QJsonArray>
#include <QDebug>
@@ -134,10 +134,8 @@ bool QtModuleInfoStore::populate(const QString &modulesDir, const QString &trans
}
// Read modules, and assign a bit as ID.
- QDirIterator dit(modulesDir, { QLatin1String("*.json") }, QDir::Files);
- while (dit.hasNext()) {
- QString filePath = dit.next();
- QtModule module = moduleFromJsonFile(filePath, errorString);
+ for (const auto &dirEntry : QDirListing(modulesDir, {u"*.json"_s}, QDir::Files)) {
+ QtModule module = moduleFromJsonFile(dirEntry.filePath(), errorString);
if (!errorString->isEmpty())
return false;
if (module.internal && module.name.endsWith(QStringLiteral("Private")))