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
Pick-to: 6.8
Change-Id: I1fa195b42fd5e00be157fffd6c861f6ddb1eeed1
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
This commit is contained in:
Thiago Macieira 2024-10-16 07:41:23 -07:00
parent a5364a279e
commit 56fa23911c
4 changed files with 5 additions and 4 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

@ -729,7 +729,8 @@ void QMimeXMLProvider::ensureLoaded()
{
QStringList allFiles;
const QString packageDir = m_directory + QStringView(u"/packages");
for (const auto &entry : QDirListing(packageDir, QDirListing::IteratorFlag::FilesOnly))
for (const auto &entry : QDirListing(packageDir, QDirListing::IteratorFlag::FilesOnly
| QDirListing::IteratorFlag::ResolveSymlinks))
allFiles.emplace_back(packageDir + u'/' + entry.fileName());
if (m_allFiles == allFiles)

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