diff options
Diffstat (limited to 'src/corelib/io/qfilesystemengine.cpp')
-rw-r--r-- | src/corelib/io/qfilesystemengine.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp index bedace4c79..d8b215816c 100644 --- a/src/corelib/io/qfilesystemengine.cpp +++ b/src/corelib/io/qfilesystemengine.cpp @@ -83,12 +83,11 @@ static inline bool _q_checkEntry(QFileSystemEntry &entry, QFileSystemMetaData &d return true; } -static inline bool _q_checkEntry(QAbstractFileEngine *&engine, bool resolvingEntry) +static inline bool _q_checkEntry(std::unique_ptr<QAbstractFileEngine> &engine, bool resolvingEntry) { if (resolvingEntry) { if (!(engine->fileFlags(QAbstractFileEngine::FlagsMask) & QAbstractFileEngine::ExistsFlag)) { - delete engine; - engine = nullptr; + engine.reset(); return false; } } @@ -96,8 +95,9 @@ static inline bool _q_checkEntry(QAbstractFileEngine *&engine, bool resolvingEnt return true; } -static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &entry, QFileSystemMetaData &data, - QAbstractFileEngine *&engine, bool resolvingEntry = false) +static bool _q_createLegacyEngine_recursive(QFileSystemEntry &entry, QFileSystemMetaData &data, + std::unique_ptr<QAbstractFileEngine> &engine, + bool resolvingEntry = false) { QString const &filePath = entry.filePath(); if ((engine = qt_custom_file_engine_handler_create(filePath))) @@ -111,7 +111,7 @@ static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &ent if (ch == u':') { if (prefixSeparator == 0) { - engine = new QResourceFileEngine(filePath); + engine = std::make_unique<QResourceFileEngine>(filePath); return _q_checkEntry(engine, resolvingEntry); } @@ -123,7 +123,7 @@ static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &ent entry = QFileSystemEntry(QDir::cleanPath( paths.at(i) % u'/' % QStringView{filePath}.mid(prefixSeparator + 1))); // Recurse! - if (_q_resolveEntryAndCreateLegacyEngine_recursive(entry, data, engine, true)) + if (_q_createLegacyEngine_recursive(entry, data, engine, true)) return true; } @@ -153,12 +153,13 @@ static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &ent QFileSystemEngine API should be used to query and interact with the file system object. */ -QAbstractFileEngine *QFileSystemEngine::resolveEntryAndCreateLegacyEngine( - QFileSystemEntry &entry, QFileSystemMetaData &data) { +std::unique_ptr<QAbstractFileEngine> +QFileSystemEngine::createLegacyEngine(QFileSystemEntry &entry, QFileSystemMetaData &data) +{ QFileSystemEntry copy = entry; - QAbstractFileEngine *engine = nullptr; + std::unique_ptr<QAbstractFileEngine> engine; - if (_q_resolveEntryAndCreateLegacyEngine_recursive(copy, data, engine)) + if (_q_createLegacyEngine_recursive(copy, data, engine)) // Reset entry to resolved copy. entry = copy; else |