summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAhmad Samir <a.samirh78@gmail.com>2023-12-17 20:18:38 +0200
committerAhmad Samir <a.samirh78@gmail.com>2024-03-17 14:30:33 +0200
commite146d835a69d57748bf2978cf5134ac5d86d81cf (patch)
tree4b42c83f549b04c5dc39d37e02baeebc9102be44
parent66dd00dcfd8a715ff6bc736e6beb5f2d3b2c69cc (diff)
QAbstractFileEngine: make {begin,end}EntryList() return a unique_ptr
Makes ownership clearer. Change-Id: Ibb57ca900ef30b16d48964a977e997ba6705248b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp4
-rw-r--r--src/corelib/io/qabstractfileengine.cpp23
-rw-r--r--src/corelib/io/qabstractfileengine_p.h8
-rw-r--r--src/corelib/io/qdirlisting.cpp5
-rw-r--r--src/corelib/io/qfsfileengine.cpp5
-rw-r--r--src/corelib/io/qfsfileengine_iterator.cpp4
-rw-r--r--src/corelib/io/qfsfileengine_p.h3
-rw-r--r--src/corelib/io/qresource.cpp7
-rw-r--r--src/corelib/io/qresource_p.h3
-rw-r--r--src/plugins/platforms/android/androidcontentfileengine.cpp6
-rw-r--r--src/plugins/platforms/android/androidcontentfileengine.h3
-rw-r--r--src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp5
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h3
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm6
-rw-r--r--tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp6
-rw-r--r--tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp5
-rw-r--r--tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp4
17 files changed, 59 insertions, 41 deletions
diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp
index 8c80ec1eba..f1315a78f0 100644
--- a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp
@@ -38,10 +38,10 @@ QAbstractSocketEngine *ZipEngineHandler::create(const QString &fileName) const
//! [2]
-QAbstractFileEngineIterator *
+QAbstractFileEngine::IteratorUniquePtr
CustomFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
- return new CustomFileEngineIterator(filters, filterNames);
+ return std::make_unique<CustomFileEngineIterator>(filters, filterNames);
}
//! [2]
diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp
index bb30689e60..55655adfc4 100644
--- a/src/corelib/io/qabstractfileengine.cpp
+++ b/src/corelib/io/qabstractfileengine.cpp
@@ -891,6 +891,14 @@ bool QAbstractFileEngine::cloneTo(QAbstractFileEngine *target)
*/
/*!
+ \typedef QAbstractFileEngine::IteratorUniquePtr
+ \since 6.8
+
+ Synonym for std::unique_ptr<Iterator> (that is a
+ std::unique_ptr<QAbstractFileEngineIterator>).
+*/
+
+/*!
Constructs a QAbstractFileEngineIterator, using the entry filters \a
filters, and wildcard name filters \a nameFilters.
*/
@@ -1019,20 +1027,19 @@ QFileInfo QAbstractFileEngineIterator::currentFileInfo() const
*/
/*!
- Returns an instance of a QAbstractFileEngineIterator using \a filters for
- entry filtering and \a filterNames for name filtering. This function is
- called by QDirListing to initiate directory iteration.
-
- QDirListing takes ownership of the returned instance, and deletes it when
- it's done.
+ Returns a QAbstractFileEngine::IteratorUniquePtr, that uses \a filters
+ for entry filtering and \a filterNames for name filtering. This function
+ is called by QDirListing to initiate directory iteration.
\sa QDirListing
*/
-QAbstractFileEngine::Iterator *QAbstractFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
+QAbstractFileEngine::IteratorUniquePtr
+QAbstractFileEngine::beginEntryList(QDir::Filters filters,
+ const QStringList &filterNames)
{
Q_UNUSED(filters);
Q_UNUSED(filterNames);
- return nullptr;
+ return {};
}
/*!
diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h
index b6ef42399d..eef83fc46d 100644
--- a/src/corelib/io/qabstractfileengine_p.h
+++ b/src/corelib/io/qabstractfileengine_p.h
@@ -19,6 +19,7 @@
#include "QtCore/qfile.h"
#include "QtCore/qdir.h"
+#include <memory>
#include <optional>
#ifdef open
@@ -126,8 +127,11 @@ public:
bool unmap(uchar *ptr);
typedef QAbstractFileEngineIterator Iterator;
- virtual Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames);
- virtual Iterator* endEntryList() { return nullptr; }
+ using IteratorUniquePtr = std::unique_ptr<Iterator>;
+
+ virtual IteratorUniquePtr
+ beginEntryList(QDir::Filters filters, const QStringList &filterNames);
+ virtual IteratorUniquePtr endEntryList() { return {}; }
virtual qint64 read(char *data, qint64 maxlen);
virtual qint64 readLine(char *data, qint64 maxlen);
diff --git a/src/corelib/io/qdirlisting.cpp b/src/corelib/io/qdirlisting.cpp
index ae9d808abc..8200366a5a 100644
--- a/src/corelib/io/qdirlisting.cpp
+++ b/src/corelib/io/qdirlisting.cpp
@@ -165,10 +165,9 @@ void QDirListingPrivate::pushDirectory(QDirEntryInfo &entryInfo)
if (engine) {
engine->setFileName(path);
- QAbstractFileEngineIterator *it = engine->beginEntryList(filters, nameFilters);
- if (it) {
+ if (auto it = engine->beginEntryList(filters, nameFilters)) {
it->setPath(path);
- fileEngineIterators.emplace(FEngineIteratorPtr(it));
+ fileEngineIterators.emplace(std::move(it));
} else {
// No iterator; no entry list.
}
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index d4fcf7d862..df8dd494ee 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -791,9 +791,10 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
/*!
\internal
*/
-QAbstractFileEngine::Iterator *QFSFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
+QAbstractFileEngine::IteratorUniquePtr
+QFSFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
- return new QFSFileEngineIterator(filters, filterNames);
+ return std::make_unique<QFSFileEngineIterator>(filters, filterNames);
}
#endif // QT_NO_FILESYSTEMITERATOR
diff --git a/src/corelib/io/qfsfileengine_iterator.cpp b/src/corelib/io/qfsfileengine_iterator.cpp
index d6c9320ce0..c65b6e5d3e 100644
--- a/src/corelib/io/qfsfileengine_iterator.cpp
+++ b/src/corelib/io/qfsfileengine_iterator.cpp
@@ -10,8 +10,8 @@
QT_BEGIN_NAMESPACE
QFSFileEngineIterator::QFSFileEngineIterator(QDir::Filters filters, const QStringList &filterNames)
- : QAbstractFileEngineIterator(filters, filterNames)
- , done(false)
+ : QAbstractFileEngineIterator(filters, filterNames),
+ done(false)
{
}
diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index 9cbe3fc96b..a2dc699305 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -82,7 +82,8 @@ public:
int handle() const override;
#ifndef QT_NO_FILESYSTEMITERATOR
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+ IteratorUniquePtr beginEntryList(QDir::Filters filters,
+ const QStringList &filterNames) override;
#endif
qint64 read(char *data, qint64 maxlen) override;
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index d16b799754..d61846084a 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -1534,11 +1534,10 @@ QDateTime QResourceFileEngine::fileTime(FileTime time) const
/*!
\internal
*/
-QAbstractFileEngine::Iterator *QResourceFileEngine::beginEntryList(QDir::Filters filters,
- const QStringList &filterNames)
+QAbstractFileEngine::IteratorUniquePtr
+QResourceFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
- return new QResourceFileEngineIterator(filters, filterNames);
-
+ return std::make_unique<QResourceFileEngineIterator>(filters, filterNames);
}
bool QResourceFileEngine::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output)
diff --git a/src/corelib/io/qresource_p.h b/src/corelib/io/qresource_p.h
index 2439695ab9..01ff3c8c5f 100644
--- a/src/corelib/io/qresource_p.h
+++ b/src/corelib/io/qresource_p.h
@@ -49,7 +49,8 @@ public:
QDateTime fileTime(FileTime time) const override;
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+ IteratorUniquePtr beginEntryList(QDir::Filters filters,
+ const QStringList &filterNames) override;
bool extension(Extension extension, const ExtensionOption *option = nullptr, ExtensionReturn *output = nullptr) override;
bool supportsExtension(Extension extension) const override;
diff --git a/src/plugins/platforms/android/androidcontentfileengine.cpp b/src/plugins/platforms/android/androidcontentfileengine.cpp
index 1e213f5a3e..316daef1da 100644
--- a/src/plugins/platforms/android/androidcontentfileengine.cpp
+++ b/src/plugins/platforms/android/androidcontentfileengine.cpp
@@ -248,10 +248,10 @@ QString AndroidContentFileEngine::fileName(FileName f) const
return QString();
}
-QAbstractFileEngine::Iterator *AndroidContentFileEngine::beginEntryList(QDir::Filters filters,
- const QStringList &filterNames)
+QAbstractFileEngine::IteratorUniquePtr
+AndroidContentFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
- return new AndroidContentFileEngineIterator(filters, filterNames);
+ return std::make_unique<AndroidContentFileEngineIterator>(filters, filterNames);
}
AndroidContentFileEngineHandler::AndroidContentFileEngineHandler() = default;
diff --git a/src/plugins/platforms/android/androidcontentfileengine.h b/src/plugins/platforms/android/androidcontentfileengine.h
index 98e6bef63c..adaff7f665 100644
--- a/src/plugins/platforms/android/androidcontentfileengine.h
+++ b/src/plugins/platforms/android/androidcontentfileengine.h
@@ -30,7 +30,8 @@ public:
QDateTime fileTime(FileTime time) const override;
FileFlags fileFlags(FileFlags type = FileInfoAll) const override;
QString fileName(FileName file = DefaultName) const override;
- QAbstractFileEngine::Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+ IteratorUniquePtr beginEntryList(QDir::Filters filters,
+ const QStringList &filterNames) override;
private:
void closeNativeFileDescriptor();
diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
index 902dee5f25..6d5479a559 100644
--- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
+++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
@@ -367,10 +367,11 @@ public:
m_assetsInfoCache.insert(m_fileName, newAssetInfoPtr);
}
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
+ IteratorUniquePtr
+ beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
{
if (m_assetInfo && m_assetInfo->type == AssetItem::Type::Folder)
- return new AndroidAbstractFileEngineIterator(filters, filterNames, m_fileName);
+ return std::make_unique<AndroidAbstractFileEngineIterator>(filters, filterNames, m_fileName);
return nullptr;
}
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h
index e3fb854734..3d27dc48ed 100644
--- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h
@@ -29,7 +29,8 @@ public:
void setFileName(const QString &file) override;
#ifndef QT_NO_FILESYSTEMITERATOR
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+ IteratorUniquePtr beginEntryList(QDir::Filters filters,
+ const QStringList &filterNames) override;
#endif
void setError(QFile::FileError error, const QString &str) { QAbstractFileEngine::setError(error, str); }
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
index e8a885a053..a3593669cf 100644
--- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
@@ -440,10 +440,10 @@ void QIOSFileEngineAssetsLibrary::setFileName(const QString &file)
#ifndef QT_NO_FILESYSTEMITERATOR
-QAbstractFileEngine::Iterator *QIOSFileEngineAssetsLibrary::beginEntryList(
- QDir::Filters filters, const QStringList &filterNames)
+QAbstractFileEngine::IteratorUniquePtr
+QIOSFileEngineAssetsLibrary::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
- return new QIOSFileEngineIteratorAssetsLibrary(filters, filterNames);
+ return std::make_unique<QIOSFileEngineIteratorAssetsLibrary>(filters, filterNames);
}
QT_END_NAMESPACE
diff --git a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp
index d34ca243e0..cf8d5af583 100644
--- a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp
+++ b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp
@@ -459,9 +459,11 @@ public:
: QFSFileEngine(fileName)
{
}
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
+
+ IteratorUniquePtr
+ beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
{
- return new Iterator(filters, filterNames);
+ return std::make_unique<Iterator>(filters, filterNames);
}
FileFlags fileFlags(FileFlags type) const override
{
diff --git a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp
index e4d0b88d2d..d534feb3ce 100644
--- a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp
+++ b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp
@@ -436,8 +436,9 @@ public:
: QFSFileEngine(fileName)
{ }
- QAbstractFileEngineIterator *beginEntryList(QDir::Filters, const QStringList &) override
- { return 0; }
+ IteratorUniquePtr
+ beginEntryList(QDir::Filters, const QStringList &) override
+ { return nullptr; }
};
class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler
diff --git a/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp
index 04ba406831..1b550e1f0d 100644
--- a/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp
+++ b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp
@@ -421,8 +421,8 @@ public:
: QFSFileEngine(fileName)
{ }
- QAbstractFileEngineIterator *beginEntryList(QDir::Filters, const QStringList &) override
- { return 0; }
+ IteratorUniquePtr beginEntryList(QDir::Filters, const QStringList &) override
+ { return nullptr; }
};
class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler