diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-09-20 04:03:36 +0200 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-09-22 01:53:33 +0200 |
commit | 50a470eab8a409901250d2d3cca5399e9c243f59 (patch) | |
tree | ee949077f3794f702e2a9f4e0b148b43c8bd79bd | |
parent | patch_manager: Add LayeredFS mods support (diff) | |
download | yuzu-50a470eab8a409901250d2d3cca5399e9c243f59.tar yuzu-50a470eab8a409901250d2d3cca5399e9c243f59.tar.gz yuzu-50a470eab8a409901250d2d3cca5399e9c243f59.tar.bz2 yuzu-50a470eab8a409901250d2d3cca5399e9c243f59.tar.lz yuzu-50a470eab8a409901250d2d3cca5399e9c243f59.tar.xz yuzu-50a470eab8a409901250d2d3cca5399e9c243f59.tar.zst yuzu-50a470eab8a409901250d2d3cca5399e9c243f59.zip |
-rw-r--r-- | src/core/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/core/file_sys/bis_factory.cpp | 12 | ||||
-rw-r--r-- | src/core/file_sys/bis_factory.h | 5 |
3 files changed, 18 insertions, 3 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 67d1f9615..ead86fd85 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -32,6 +32,8 @@ add_library(core STATIC file_sys/control_metadata.h file_sys/directory.h file_sys/errors.h + file_sys/fsmitm_romfsbuild.cpp + file_sys/fsmitm_romfsbuild.hpp file_sys/mode.h file_sys/nca_metadata.cpp file_sys/nca_metadata.h @@ -59,6 +61,8 @@ add_library(core STATIC file_sys/vfs.h file_sys/vfs_concat.cpp file_sys/vfs_concat.h + file_sys/vfs_layered.cpp + file_sys/vfs_layered.h file_sys/vfs_offset.cpp file_sys/vfs_offset.h file_sys/vfs_real.cpp diff --git a/src/core/file_sys/bis_factory.cpp b/src/core/file_sys/bis_factory.cpp index 205492897..012e08e7d 100644 --- a/src/core/file_sys/bis_factory.cpp +++ b/src/core/file_sys/bis_factory.cpp @@ -4,11 +4,12 @@ #include "core/file_sys/bis_factory.h" #include "core/file_sys/registered_cache.h" +#include "fmt/format.h" namespace FileSys { -BISFactory::BISFactory(VirtualDir nand_root_) - : nand_root(std::move(nand_root_)), +BISFactory::BISFactory(VirtualDir nand_root_, VirtualDir load_root_) + : nand_root(std::move(nand_root_)), load_root(std::move(load_root_)), sysnand_cache(std::make_shared<RegisteredCache>( GetOrCreateDirectoryRelative(nand_root, "/system/Contents/registered"))), usrnand_cache(std::make_shared<RegisteredCache>( @@ -24,4 +25,11 @@ std::shared_ptr<RegisteredCache> BISFactory::GetUserNANDContents() const { return usrnand_cache; } +VirtualDir BISFactory::GetModificationLoadRoot(u64 title_id) const { + // LayeredFS doesn't work on updates and title id-less homebrew + if (title_id == 0 || (title_id & 0x800) > 0) + return nullptr; + return GetOrCreateDirectoryRelative(load_root, fmt::format("/{:016X}", title_id)); +} + } // namespace FileSys diff --git a/src/core/file_sys/bis_factory.h b/src/core/file_sys/bis_factory.h index 9523dd864..0d81967cc 100644 --- a/src/core/file_sys/bis_factory.h +++ b/src/core/file_sys/bis_factory.h @@ -17,14 +17,17 @@ class RegisteredCache; /// registered caches. class BISFactory { public: - explicit BISFactory(VirtualDir nand_root); + BISFactory(VirtualDir nand_root, VirtualDir load_root); ~BISFactory(); std::shared_ptr<RegisteredCache> GetSystemNANDContents() const; std::shared_ptr<RegisteredCache> GetUserNANDContents() const; + VirtualDir GetModificationLoadRoot(u64 title_id) const; + private: VirtualDir nand_root; + VirtualDir load_root; std::shared_ptr<RegisteredCache> sysnand_cache; std::shared_ptr<RegisteredCache> usrnand_cache; |