diff options
| author | tristan-iu <tristan.iung@hotmail.com> | 2026-06-21 17:56:42 +0200 |
|---|---|---|
| committer | tristan-iu <tristan.iung@hotmail.com> | 2026-06-23 23:54:42 +0200 |
| commit | 9d78591d2bc36840b776f2cc5600471f7ea9992b (patch) | |
| tree | 1f37776cdf7b94d9bc6b0ecc4eefd39db03a78b6 /src | |
| parent | a5ad5ddc9df898cffad7e7a0996051a455fc99fc (diff) | |
Skip FUSE mount for games that manage their own VFS
Diffstat (limited to 'src')
| -rw-r--r-- | src/src/organizercore.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/src/organizercore.cpp b/src/src/organizercore.cpp index 64772fa..2f62251 100644 --- a/src/src/organizercore.cpp +++ b/src/src/organizercore.cpp @@ -809,7 +809,14 @@ void OrganizerCore::prepareVFS() m_USVFS.setRootBuilderEnabled(vfsRootBuilder, storageDir.toStdString()); } - m_USVFS.updateMapping(fileMapping(m_CurrentProfile->name(), QString())); + // Games that manage their own VFS (e.g. OpenMW via openmw.cfg) opt out of the + // FUSE mount; Fluorine must not overlay Data Files for them. + if (managedGame() == nullptr || managedGame()->usesVFS()) { + m_USVFS.updateMapping(fileMapping(m_CurrentProfile->name(), QString())); + } else { + log::debug("prepareVFS: skipping FUSE mount; managed game manages its own " + "VFS (usesVFS=false)"); + } } void OrganizerCore::unmountVFS() @@ -2687,8 +2694,14 @@ bool OrganizerCore::beforeRun( } try { - m_USVFS.updateMapping(fileMapping(profileName, customOverwrite)); - m_USVFS.updateForcedLibraries(forcedLibraries); + // OpenMW and other self-managed-VFS games skip the FUSE mount (usesVFS()). + if (managedGame() == nullptr || managedGame()->usesVFS()) { + m_USVFS.updateMapping(fileMapping(profileName, customOverwrite)); + m_USVFS.updateForcedLibraries(forcedLibraries); + } else { + log::debug("beforeRun: skipping FUSE mount; managed game manages its own " + "VFS (usesVFS=false)"); + } } catch (const FuseConnectorException& e) { log::error("VFS mount failed: {}", e.what()); return false; |
