From 844e0114b07f38feaf948d66a1336d350cfa6c6d Mon Sep 17 00:00:00 2001
From: lat9nq <22451773+lat9nq@users.noreply.github.com>
Date: Tue, 15 Jun 2021 19:59:10 -0400
Subject: [PATCH] core: Simplify SDMC mod loading

If someone else wants to support other mod formats in the SDMC
directory, that can be added later. For now, just allow RomFS modding
here and force people to do other types of mods the old way.

Addresses review comments.

Co-authored-by: LC <mathew1800@gmail.com>
---
 src/core/file_sys/patch_manager.cpp           | 25 +++++--------------
 src/core/file_sys/sdmc_factory.cpp            |  3 ++-
 .../hle/service/filesystem/filesystem.cpp     |  3 ++-
 3 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/src/core/file_sys/patch_manager.cpp b/src/core/file_sys/patch_manager.cpp
index 6f5aa6da29..13d294ad87 100644
--- a/src/core/file_sys/patch_manager.cpp
+++ b/src/core/file_sys/patch_manager.cpp
@@ -529,26 +529,13 @@ PatchManager::PatchVersionNames PatchManager::GetPatchVersionNames(VirtualFile u
         }
     }
 
-    // SDMC mod directory (LayeredFS)
+    // SDMC mod directory (RomFS LayeredFS)
     const auto sdmc_mod_dir = fs_controller.GetSDMCModificationLoadRoot(title_id);
-    if (sdmc_mod_dir != nullptr && sdmc_mod_dir->GetSize() > 0) {
-        std::string types;
-
-        const auto exefs_dir = FindSubdirectoryCaseless(sdmc_mod_dir, "exefs");
-        if (IsDirValidAndNonEmpty(exefs_dir)) {
-            bool layeredfs = false;
-
-            if (layeredfs)
-                AppendCommaIfNotEmpty(types, "LayeredExeFS");
-        }
-        if (IsDirValidAndNonEmpty(FindSubdirectoryCaseless(sdmc_mod_dir, "romfs")))
-            AppendCommaIfNotEmpty(types, "LayeredFS");
-
-        if (!types.empty()) {
-            const auto mod_disabled =
-                std::find(disabled.begin(), disabled.end(), "SDMC") != disabled.end();
-            out.insert_or_assign(mod_disabled ? "[D] SDMC" : "SDMC", types);
-        }
+    if (sdmc_mod_dir != nullptr && sdmc_mod_dir->GetSize() > 0 &&
+        IsDirValidAndNonEmpty(FindSubdirectoryCaseless(sdmc_mod_dir, "romfs"))) {
+        const auto mod_disabled =
+            std::find(disabled.begin(), disabled.end(), "SDMC") != disabled.end();
+        out.insert_or_assign(mod_disabled ? "[D] SDMC" : "SDMC", "LayeredFS");
     }
 
     // DLC
diff --git a/src/core/file_sys/sdmc_factory.cpp b/src/core/file_sys/sdmc_factory.cpp
index f4dba8f163..7e878123c5 100644
--- a/src/core/file_sys/sdmc_factory.cpp
+++ b/src/core/file_sys/sdmc_factory.cpp
@@ -29,8 +29,9 @@ ResultVal<VirtualDir> SDMCFactory::Open() const {
 
 VirtualDir SDMCFactory::GetSDMCModificationLoadRoot(u64 title_id) const {
     // LayeredFS doesn't work on updates and title id-less homebrew
-    if (title_id == 0 || (title_id & 0xFFF) == 0x800)
+    if (title_id == 0 || (title_id & 0xFFF) == 0x800) {
         return nullptr;
+    }
     return GetOrCreateDirectoryRelative(dir, fmt::format("/atmosphere/contents/{:016X}", title_id));
 }
 
diff --git a/src/core/hle/service/filesystem/filesystem.cpp b/src/core/hle/service/filesystem/filesystem.cpp
index 9191f19fe8..d66e74d3a8 100644
--- a/src/core/hle/service/filesystem/filesystem.cpp
+++ b/src/core/hle/service/filesystem/filesystem.cpp
@@ -706,8 +706,9 @@ FileSys::VirtualDir FileSystemController::GetModificationLoadRoot(u64 title_id)
 FileSys::VirtualDir FileSystemController::GetSDMCModificationLoadRoot(u64 title_id) const {
     LOG_TRACE(Service_FS, "Opening SDMC mod load root for tid={:016X}", title_id);
 
-    if (sdmc_factory == nullptr)
+    if (sdmc_factory == nullptr) {
         return nullptr;
+    }
 
     return sdmc_factory->GetSDMCModificationLoadRoot(title_id);
 }