Skip to content

Commit

Permalink
QFileInfoGatherer: Fix internal build (with Q_AUTOTEST_EXPORT)
Browse files Browse the repository at this point in the history
I'm surprised that this passed the CI on Windows, because
Q_AUTOTEST_EXPORT is Q_DECL_EXPORT, which is __declspec(dllexport) and
all dllexport'ed functions must be defined in the current DLL, not
imported from elsewhere. This is similar on Unix systems with the
no_direct_extern_access mode, because then Q_DECL_EXPORT behaves like on
Windows.

That means Qt modules can't call a Q_AUTOTEST_EXPORT function
from another module (only tests can). Solve this by providing a function
that is properly exported with Q_CORE_EXPORT.

Amends commit 3d08816.

Pick-to: 6.8
Task-number: QTBUG-28246
Task-number: QTBUG-31103
Change-Id: I2ba317ab34bda8c18954fffd28395f7354cb54f2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
  • Loading branch information
thiagomacieira authored and torarnv committed Oct 9, 2024
1 parent 5d18017 commit fbe61de
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 5 deletions.
6 changes: 6 additions & 0 deletions src/corelib/io/qfilesystemengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,12 @@ static bool _q_createLegacyEngine_recursive(QFileSystemEntry &entry, QFileSystem
return _q_checkEntry(entry, data, resolvingEntry);
}

Q_CORE_EXPORT bool qt_isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data)
{
// called from QtGui (QFileSystemModel, QFileInfoGatherer)
return QFileSystemEngine::isCaseSensitive(entry, data);
}

/*!
\internal
Expand Down
5 changes: 2 additions & 3 deletions src/corelib/io/qfilesystemengine_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,11 @@ inline bool qIsFilenameBroken(const QFileSystemEntry &entry)
Q_RETURN_ON_INVALID_FILENAME("Broken filename passed to function", (result)); \
} while (false)

Q_CORE_EXPORT bool qt_isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data);

class Q_AUTOTEST_EXPORT QFileSystemEngine
{
public:
#ifndef QT_BUILD_INTERNAL
Q_CORE_EXPORT
#endif
static bool isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data);

static QFileSystemEntry getLinkTarget(const QFileSystemEntry &link, QFileSystemMetaData &data);
Expand Down
2 changes: 1 addition & 1 deletion src/gui/itemmodels/qfileinfogatherer_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class QExtendedInformation {
#ifndef QT_NO_FSFILEENGINE
bool isCaseSensitive() const {
auto *fiPriv = QFileInfoPrivate::get(const_cast<QFileInfo*>(&mFileInfo));
return QFileSystemEngine::isCaseSensitive(fiPriv->fileEntry, fiPriv->metaData);
return qt_isCaseSensitive(fiPriv->fileEntry, fiPriv->metaData);
}
#endif

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1058,7 +1058,7 @@ void tst_QFileSystemModel::caseSensitivity()

QFileInfo tmpInfo(tmp);
auto *tmpInfoPriv = QFileInfoPrivate::get(&tmpInfo);
if (!QFileSystemEngine::isCaseSensitive(tmpInfoPriv->fileEntry, tmpInfoPriv->metaData)) {
if (!qt_isCaseSensitive(tmpInfoPriv->fileEntry, tmpInfoPriv->metaData)) {
// Verify that files can be accessed by paths with fLipPeD case.
for (int i = 0; i < paths.size(); ++i) {
const QModelIndex normalCaseIndex = indexes.at(i);
Expand Down

0 comments on commit fbe61de

Please sign in to comment.