From e25150ca29437ab315e3686aa801b8636e201e2a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 16 Oct 2024 07:41:23 -0700 Subject: [PATCH] QFactoryLoader: fix the ability to load symlinks to plugins Amends commit 7cf39bd785e8ba817960d48b120983cafcc539f3, which changed to use QDirListing but used FilesOnly. As documented, that does not include symlinks to files. I'm updating a few other uses of FilesOnly where they were ported from QDir::Files and it would be reasonable to expect that symlink to files would be included. That's why I've left QNetworkDiskCache alone. Fixes: QTBUG-130109 Change-Id: I1fa195b42fd5e00be157fffd6c861f6ddb1eeed1 Reviewed-by: Ahmad Samir (cherry picked from commit 56fa23911c3a0681de39601489d51805e208dc03) --- qmake/generators/win32/msvc_nmake.cpp | 2 +- qmake/generators/win32/msvc_vcproj.cpp | 2 +- src/corelib/plugin/qfactoryloader.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index 4e43b4e6bd7..ab7e5e0ab58 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -316,7 +316,7 @@ void NmakeMakefileGenerator::writeImplicitRulesPart(QTextStream &t) fixifiedSourceDirs.removeDuplicates(); using F = QDirListing::IteratorFlag; for (const QString &sourceDir : std::as_const(fixifiedSourceDirs)) { - for (const auto &dirEntry : QDirListing(sourceDir, sourceFilesFilter, F::FilesOnly)) { + for (const auto &dirEntry : QDirListing(sourceDir, sourceFilesFilter, F::FilesOnly | F::ResolveSymlinks)) { QString &duplicate = fileNames[dirEntry.completeBaseName()]; if (duplicate.isNull()) { duplicate = dirEntry.filePath(); diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 82d47f59811..1566f72ba66 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -1294,7 +1294,7 @@ void VcprojGenerator::initDeploymentTool() int pathSize = searchPath.size(); using F = QDirListing::IteratorFlag; - QDirListing dirList(searchPath, QStringList{nameFilter}, F::FilesOnly | F::Recursive); + QDirListing dirList(searchPath, QStringList{nameFilter}, F::FilesOnly | F::ResolveSymlinks | F::Recursive); // foreach dirIterator-entry in d for (const auto &dirEntry : dirList) { const QString absoluteItemPath = Option::fixPathToTargetOS(dirEntry.absolutePath()); diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index 10f47fe750a..c457e332a41 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -309,7 +309,7 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path) #elif defined(Q_OS_ANDROID) QStringList("libplugins_%1_*.so"_L1.arg(suffix)), #endif - QDirListing::IteratorFlag::FilesOnly); + QDirListing::IteratorFlag::FilesOnly | QDirListing::IteratorFlag::ResolveSymlinks); for (const auto &dirEntry : plugins) { const QString &fileName = dirEntry.fileName();