aboutsummaryrefslogtreecommitdiff
path: root/libs/usvfs/src/shared
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-17 23:59:40 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-17 23:59:48 -0600
commit480a57cf037a46f176128e6c94aa5616fcf704a3 (patch)
tree35be94099e2669f518c623acdf8fe23ee82e55a8 /libs/usvfs/src/shared
parent91e1d7f9f03ab3fd77cee94c1eac2abf89254e50 (diff)
Fix Wine prefix deployment, INI handling, and data directory paths
- Fix data directory path to use ~/.var/app/com.fluorine.manager consistently (was ~/.local/share/fluorine in committed code) - Fix VFS helper path in fuseconnector.cpp to use fluorineDataDir() - Fix localAppFolder() to resolve Wine prefix AppData/Local on Linux instead of returning XDG ~/.local/share - Add localAppName() virtual method for correct AppData folder mapping (Enderal→"enderal", Nehrim→"Oblivion") - Fix mergeTweak() to use direct INI parser instead of QSettings which corrupts backslashes and URL-encodes spaces in keys - Make resolveWineDataDirName() more robust with existence checks and fallback chain (documentsDirectory → gameShortName → gameName) - Add comprehensive debug logging throughout Wine prefix deployment - Fix INI case handling: copy instead of symlink for case-mismatched INIs, ensure both proper-case and lowercase aliases exist - Remove native build script (Flatpak only) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/usvfs/src/shared')
-rw-r--r--libs/usvfs/src/shared/directory_tree.cpp4
-rw-r--r--libs/usvfs/src/shared/directory_tree.h21
2 files changed, 25 insertions, 0 deletions
diff --git a/libs/usvfs/src/shared/directory_tree.cpp b/libs/usvfs/src/shared/directory_tree.cpp
index 34cc797..33d7ae1 100644
--- a/libs/usvfs/src/shared/directory_tree.cpp
+++ b/libs/usvfs/src/shared/directory_tree.cpp
@@ -34,6 +34,10 @@ fs::path::iterator nextIter(const fs::path::iterator& iter,
void advanceIter(fs::path::iterator& iter, const fs::path::iterator& end)
{
+ if (iter == end) {
+ return;
+ }
+
++iter;
while (iter != end && (iter->wstring() == L"/" || iter->wstring() == L"\\" ||
iter->wstring() == L"."))
diff --git a/libs/usvfs/src/shared/directory_tree.h b/libs/usvfs/src/shared/directory_tree.h
index f82187f..1712071 100644
--- a/libs/usvfs/src/shared/directory_tree.h
+++ b/libs/usvfs/src/shared/directory_tree.h
@@ -327,6 +327,9 @@ public:
NodePtrT findNode(const fs::path& path)
{
fs::path::iterator iter = path.begin();
+ if (iter == path.end()) {
+ return NodePtrT();
+ }
return findNode(path, iter);
}
@@ -338,6 +341,9 @@ public:
const NodePtrT findNode(const fs::path& path) const
{
fs::path::iterator iter = path.begin();
+ if (iter == path.end()) {
+ return NodePtrT();
+ }
return findNode(path, iter);
}
@@ -350,6 +356,9 @@ public:
void visitPath(const fs::path& path, const VisitorFunction& visitor) const
{
fs::path::iterator iter = path.begin();
+ if (iter == path.end()) {
+ return;
+ }
visitPath(path, iter, visitor);
}
@@ -526,6 +535,10 @@ public:
NodePtrT findNode(const fs::path& name, fs::path::iterator& iter)
{
+ if (iter == name.end()) {
+ return NodePtrT();
+ }
+
std::string l = iter->string();
auto subNode = m_Nodes.find(iter->string());
advanceIter(iter, name.end());
@@ -548,6 +561,10 @@ public:
const NodePtrT findNode(const fs::path& name, fs::path::iterator& iter) const
{
+ if (iter == name.end()) {
+ return NodePtrT();
+ }
+
auto subNode = m_Nodes.find(iter->string());
advanceIter(iter, name.end());
@@ -570,6 +587,10 @@ public:
void visitPath(const fs::path& path, fs::path::iterator& iter,
const VisitorFunction& visitor) const
{
+ if (iter == path.end()) {
+ return;
+ }
+
auto subNode = m_Nodes.find(iter->string());
if (subNode != m_Nodes.end()) {