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 <a.samirh78@gmail.com>
(cherry picked from commit 56fa23911c3a0681de39601489d51805e208dc03)
This commit is contained in:
Thiago Macieira 2024-10-16 07:41:23 -07:00
parent 5baa0d759b
commit e25150ca29
3 changed files with 3 additions and 3 deletions

View File

@ -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();

View File

@ -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());

View File

@ -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();