bis_factory: Add mod directory VFS getter
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user