diff options
Diffstat (limited to 'src/corelib')
| -rw-r--r-- | src/corelib/io/qabstractfileengine.cpp | 39 | ||||
| -rw-r--r-- | src/corelib/io/qdir.cpp | 37 | ||||
| -rw-r--r-- | src/corelib/io/qfilesystemiterator_p.h | 1 | ||||
| -rw-r--r-- | src/corelib/io/qfsfileengine.cpp | 1 | ||||
| -rw-r--r-- | src/corelib/io/qstorageinfo_linux.cpp | 23 | ||||
| -rw-r--r-- | src/corelib/io/qstorageinfo_unix.cpp | 1 | ||||
| -rw-r--r-- | src/corelib/io/qtemporarydir.cpp | 1 | ||||
| -rw-r--r-- | src/corelib/plugin/qfactoryloader.cpp | 10 | ||||
| -rw-r--r-- | src/corelib/time/qtimezoneprivate_tz.cpp | 6 |
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()); |
