diff options
Diffstat (limited to 'src/corelib/io/qfilesystemengine.cpp')
-rw-r--r-- | src/corelib/io/qfilesystemengine.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp index 3edaf1ce1d..d8b215816c 100644 --- a/src/corelib/io/qfilesystemengine.cpp +++ b/src/corelib/io/qfilesystemengine.cpp @@ -27,7 +27,7 @@ QString QFileSystemEngine::slowCanonicalized(const QString &path) QFileInfo fi; const QChar slash(u'/'); QString tmpPath = path; - int separatorPos = 0; + qsizetype separatorPos = 0; QSet<QString> nonSymlinks; QDuplicateTracker<QString> known; @@ -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,22 +95,23 @@ 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))) return _q_checkEntry(engine, resolvingEntry); #if defined(QT_BUILD_CORE_LIB) - for (int prefixSeparator = 0; prefixSeparator < filePath.size(); ++prefixSeparator) { + for (qsizetype prefixSeparator = 0; prefixSeparator < filePath.size(); ++prefixSeparator) { QChar const ch = filePath[prefixSeparator]; if (ch == u'/') break; if (ch == u':') { if (prefixSeparator == 0) { - engine = new QResourceFileEngine(filePath); + engine = std::make_unique<QResourceFileEngine>(filePath); return _q_checkEntry(engine, resolvingEntry); } @@ -119,11 +119,11 @@ static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &ent break; const QStringList &paths = QDir::searchPaths(filePath.left(prefixSeparator)); - for (int i = 0; i < paths.count(); i++) { + for (int i = 0; i < paths.size(); i++) { 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 |