vfs: Add GetOrCreateDirectoryRelative method

This commit is contained in:
Zach Hilman 2018-08-16 17:05:30 -04:00
parent ef3768f323
commit bf33f80fae
3 changed files with 13 additions and 9 deletions

View file

@ -6,19 +6,12 @@
namespace FileSys { namespace FileSys {
static VirtualDir GetOrCreateDirectory(const VirtualDir& dir, std::string_view path) {
const auto res = dir->GetDirectoryRelative(path);
if (res == nullptr)
return dir->CreateDirectoryRelative(path);
return res;
}
BISFactory::BISFactory(VirtualDir nand_root_) BISFactory::BISFactory(VirtualDir nand_root_)
: nand_root(std::move(nand_root_)), : nand_root(std::move(nand_root_)),
sysnand_cache(std::make_shared<RegisteredCache>( sysnand_cache(std::make_shared<RegisteredCache>(
GetOrCreateDirectory(nand_root, "/system/Contents/registered"))), GetOrCreateDirectoryRelative(nand_root, "/system/Contents/registered"))),
usrnand_cache(std::make_shared<RegisteredCache>( usrnand_cache(std::make_shared<RegisteredCache>(
GetOrCreateDirectory(nand_root, "/user/Contents/registered"))) {} GetOrCreateDirectoryRelative(nand_root, "/user/Contents/registered"))) {}
std::shared_ptr<RegisteredCache> BISFactory::GetSystemNANDContents() const { std::shared_ptr<RegisteredCache> BISFactory::GetSystemNANDContents() const {
return sysnand_cache; return sysnand_cache;

View file

@ -462,4 +462,11 @@ bool VfsRawCopy(VirtualFile src, VirtualFile dest) {
std::vector<u8> data = src->ReadAllBytes(); std::vector<u8> data = src->ReadAllBytes();
return dest->WriteBytes(data, 0) == data.size(); return dest->WriteBytes(data, 0) == data.size();
} }
VirtualDir GetOrCreateDirectoryRelative(const VirtualDir& rel, std::string_view path) {
const auto res = rel->GetDirectoryRelative(path);
if (res == nullptr)
return rel->CreateDirectoryRelative(path);
return res;
}
} // namespace FileSys } // namespace FileSys

View file

@ -318,4 +318,8 @@ bool DeepEquals(const VirtualFile& file1, const VirtualFile& file2, size_t block
// directory of src/dest. // directory of src/dest.
bool VfsRawCopy(VirtualFile src, VirtualFile dest); bool VfsRawCopy(VirtualFile src, VirtualFile dest);
// Checks if the directory at path relative to rel exists. If it does, returns that. If it does not
// it attempts to create it and returns the new dir or nullptr on failure.
VirtualDir GetOrCreateDirectoryRelative(const VirtualDir& rel, std::string_view path);
} // namespace FileSys } // namespace FileSys