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 <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Ahmad Samir 2023-12-14 19:50:42 +02:00
parent 3aa9388056
commit 3758829162
2 changed files with 13 additions and 17 deletions

View File

@ -26,10 +26,7 @@
#include <QtCore/private/qfilesystementry_p.h>
#include <QtCore/private/qfilesystemmetadata_p.h>
// Platform-specific headers
#if !defined(Q_OS_WIN)
#include <QtCore/qscopedpointer.h>
#endif
#include <memory>
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<QT_DIR, DirStreamCloser>;
DirPtr dir;
QT_DIRENT *dirEntry = nullptr;
int lastError = 0;
#endif
Q_DISABLE_COPY_MOVE(QFileSystemIterator)

View File

@ -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);