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
parent
3aa9388056
commit
3758829162
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue