From 3758829162ec38c1b010a0ee4ac836da6180bb55 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Thu, 14 Dec 2023 19:50:42 +0200 Subject: [PATCH] QFileSystemIterator: manage dirstream with unique_ptr Less manual resource clean-ups. Drive-by changes, initialize members in-class. Also remove an unused include. Change-Id: I03cd12e1c6c12338d09daba916cd34cb36f04260 Reviewed-by: Qt CI Bot Reviewed-by: Thiago Macieira --- src/corelib/io/qfilesystemiterator_p.h | 16 +++++++++------- src/corelib/io/qfilesystemiterator_unix.cpp | 14 ++++---------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/corelib/io/qfilesystemiterator_p.h b/src/corelib/io/qfilesystemiterator_p.h index 2792340637..29d000261c 100644 --- a/src/corelib/io/qfilesystemiterator_p.h +++ b/src/corelib/io/qfilesystemiterator_p.h @@ -26,10 +26,7 @@ #include #include -// Platform-specific headers -#if !defined(Q_OS_WIN) -#include -#endif +#include QT_BEGIN_NAMESPACE @@ -55,9 +52,14 @@ private: int uncShareIndex; bool onlyDirs; #else - QT_DIR *dir; - QT_DIRENT *dirEntry; - int lastError; + struct DirStreamCloser { + void operator()(QT_DIR *dir) { if (dir) QT_CLOSEDIR(dir); } + }; + using DirPtr = std::unique_ptr; + DirPtr dir; + + QT_DIRENT *dirEntry = nullptr; + int lastError = 0; #endif Q_DISABLE_COPY_MOVE(QFileSystemIterator) diff --git a/src/corelib/io/qfilesystemiterator_unix.cpp b/src/corelib/io/qfilesystemiterator_unix.cpp index 6d6878efda..1f059f175d 100644 --- a/src/corelib/io/qfilesystemiterator_unix.cpp +++ b/src/corelib/io/qfilesystemiterator_unix.cpp @@ -26,15 +26,13 @@ static bool checkNameDecodable(const char *d_name, qsizetype len) QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Filters filters, const QStringList &nameFilters, QDirIterator::IteratorFlags flags) : nativePath(entry.nativeFilePath()) - , dir(nullptr) - , dirEntry(nullptr) - , lastError(0) { Q_UNUSED(filters); Q_UNUSED(nameFilters); Q_UNUSED(flags); - if ((dir = QT_OPENDIR(nativePath.constData())) == nullptr) { + dir.reset(QT_OPENDIR(entry.nativeFilePath().constData())); + if (!dir) { lastError = errno; } else { if (!nativePath.endsWith('/')) @@ -42,11 +40,7 @@ QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &entry, QDir::Fi } } -QFileSystemIterator::~QFileSystemIterator() -{ - if (dir) - QT_CLOSEDIR(dir); -} +QFileSystemIterator::~QFileSystemIterator() = default; bool QFileSystemIterator::advance(QFileSystemEntry &fileEntry, QFileSystemMetaData &metaData) { @@ -54,7 +48,7 @@ bool QFileSystemIterator::advance(QFileSystemEntry &fileEntry, QFileSystemMetaDa return false; for (;;) { - dirEntry = QT_READDIR(dir); + dirEntry = QT_READDIR(dir.get()); if (dirEntry) { qsizetype len = strlen(dirEntry->d_name);