From 8b84c457625ba11d8edb72e18fc4f30449bdc160 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Sat, 8 Jun 2024 20:21:03 +0300 Subject: [PATCH] QFileSystemIterator: add constructor that takes QFileSystemEntry only This is in preparation to adding constructors that take QDirListing::IteratorFlags, I would have had to add an init() private method to deduplicate the code, so instead add a constructor that can be delegated to. Task-number: QTBUG-125859 Change-Id: Idbc76fcba50f9d0016e4ddba03b2f532a33231bd Reviewed-by: Thiago Macieira (cherry picked from commit c203c41109e41d03de8145a541ff5c8fbe976492) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/io/qfilesystemiterator_p.h | 1 + src/corelib/io/qfilesystemiterator_unix.cpp | 9 ++++++--- src/corelib/io/qfilesystemiterator_win.cpp | 7 ++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/corelib/io/qfilesystemiterator_p.h b/src/corelib/io/qfilesystemiterator_p.h index 2973b85cd2a..c55d5c6d317 100644 --- a/src/corelib/io/qfilesystemiterator_p.h +++ b/src/corelib/io/qfilesystemiterator_p.h @@ -37,6 +37,7 @@ class QFileSystemIterator { public: QFileSystemIterator(const QFileSystemEntry &entry, QDir::Filters filters); + QFileSystemIterator(const QFileSystemEntry &entry); ~QFileSystemIterator(); bool advance(QFileSystemEntry &fileEntry, QFileSystemMetaData &metaData); diff --git a/src/corelib/io/qfilesystemiterator_unix.cpp b/src/corelib/io/qfilesystemiterator_unix.cpp index a1130728ef0..f06ff253442 100644 --- a/src/corelib/io/qfilesystemiterator_unix.cpp +++ b/src/corelib/io/qfilesystemiterator_unix.cpp @@ -19,12 +19,10 @@ QT_BEGIN_NAMESPACE Native filesystem iterator, which uses ::opendir()/readdir()/dirent from the system libraries to iterate over the directory represented by \a entry. */ -QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Filters filters) +QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry) : dirPath(entry.filePath()), toUtf16(QStringDecoder::Utf8) { - Q_UNUSED(filters); - dir.reset(QT_OPENDIR(entry.nativeFilePath().constData())); if (!dir) { lastError = errno; @@ -34,6 +32,11 @@ QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Fi } } +QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Filters) + : QFileSystemIterator(entry) +{ +} + QFileSystemIterator::~QFileSystemIterator() = default; bool QFileSystemIterator::advance(QFileSystemEntry &fileEntry, QFileSystemMetaData &metaData) diff --git a/src/corelib/io/qfilesystemiterator_win.cpp b/src/corelib/io/qfilesystemiterator_win.cpp index 7644a1a0786..d2e3904af6d 100644 --- a/src/corelib/io/qfilesystemiterator_win.cpp +++ b/src/corelib/io/qfilesystemiterator_win.cpp @@ -14,7 +14,7 @@ using namespace Qt::StringLiterals; bool done = true; -QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Filters filters) +QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry) : dirPath(entry.filePath()) , nativePath(entry.nativeFilePath()) , findFileHandle(INVALID_HANDLE_VALUE) @@ -33,6 +33,11 @@ QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Fi // In MSVC2015+ case we prepend //?/ for longer file-name support if (!dirPath.endsWith(u'/')) dirPath.append(u'/'); +} + +QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Filters filters) + : QFileSystemIterator(entry) +{ if ((filters & (QDir::Dirs|QDir::Drives)) && (!(filters & (QDir::Files)))) onlyDirs = true; }