summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib')
-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
9 files changed, 50 insertions, 69 deletions
diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp
index 25dfe79d644..c9b792c5d29 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 d03800f4f84..2dcd119723d 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 5687da115ee..2973b85cd2a 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 3e96a5a6e96..66026356de4 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 db69903c481..7d9828fa3b1 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 71775b78003..9df098a3891 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 c4a414783fb..719e86208bd 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 556bfa3f1e2..87eaad3f7a9 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 afa7cf03700..b6a7d1418c7 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());