1
0
Fork 0
forked from suyu/suyu

bis_factory: Add mod directory VFS getter

This commit is contained in:
Zach Hilman 2018-09-19 22:03:36 -04:00
parent 16188acb50
commit 50a470eab8
3 changed files with 18 additions and 3 deletions

View file

@ -32,6 +32,8 @@ add_library(core STATIC
file_sys/control_metadata.h file_sys/control_metadata.h
file_sys/directory.h file_sys/directory.h
file_sys/errors.h file_sys/errors.h
file_sys/fsmitm_romfsbuild.cpp
file_sys/fsmitm_romfsbuild.hpp
file_sys/mode.h file_sys/mode.h
file_sys/nca_metadata.cpp file_sys/nca_metadata.cpp
file_sys/nca_metadata.h file_sys/nca_metadata.h
@ -59,6 +61,8 @@ add_library(core STATIC
file_sys/vfs.h file_sys/vfs.h
file_sys/vfs_concat.cpp file_sys/vfs_concat.cpp
file_sys/vfs_concat.h file_sys/vfs_concat.h
file_sys/vfs_layered.cpp
file_sys/vfs_layered.h
file_sys/vfs_offset.cpp file_sys/vfs_offset.cpp
file_sys/vfs_offset.h file_sys/vfs_offset.h
file_sys/vfs_real.cpp file_sys/vfs_real.cpp

View file

@ -4,11 +4,12 @@
#include "core/file_sys/bis_factory.h" #include "core/file_sys/bis_factory.h"
#include "core/file_sys/registered_cache.h" #include "core/file_sys/registered_cache.h"
#include "fmt/format.h"
namespace FileSys { namespace FileSys {
BISFactory::BISFactory(VirtualDir nand_root_) BISFactory::BISFactory(VirtualDir nand_root_, VirtualDir load_root_)
: nand_root(std::move(nand_root_)), : nand_root(std::move(nand_root_)), load_root(std::move(load_root_)),
sysnand_cache(std::make_shared<RegisteredCache>( sysnand_cache(std::make_shared<RegisteredCache>(
GetOrCreateDirectoryRelative(nand_root, "/system/Contents/registered"))), GetOrCreateDirectoryRelative(nand_root, "/system/Contents/registered"))),
usrnand_cache(std::make_shared<RegisteredCache>( usrnand_cache(std::make_shared<RegisteredCache>(
@ -24,4 +25,11 @@ std::shared_ptr<RegisteredCache> BISFactory::GetUserNANDContents() const {
return usrnand_cache; 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 } // namespace FileSys

View file

@ -17,14 +17,17 @@ class RegisteredCache;
/// registered caches. /// registered caches.
class BISFactory { class BISFactory {
public: public:
explicit BISFactory(VirtualDir nand_root); BISFactory(VirtualDir nand_root, VirtualDir load_root);
~BISFactory(); ~BISFactory();
std::shared_ptr<RegisteredCache> GetSystemNANDContents() const; std::shared_ptr<RegisteredCache> GetSystemNANDContents() const;
std::shared_ptr<RegisteredCache> GetUserNANDContents() const; std::shared_ptr<RegisteredCache> GetUserNANDContents() const;
VirtualDir GetModificationLoadRoot(u64 title_id) const;
private: private:
VirtualDir nand_root; VirtualDir nand_root;
VirtualDir load_root;
std::shared_ptr<RegisteredCache> sysnand_cache; std::shared_ptr<RegisteredCache> sysnand_cache;
std::shared_ptr<RegisteredCache> usrnand_cache; std::shared_ptr<RegisteredCache> usrnand_cache;