summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Zach Hilman2018-08-16 17:05:30 -0400
committerGravatar Zach Hilman2018-08-23 11:52:44 -0400
commitbf33f80fae1e97f48a62e16b1e965d7994ac4c45 (patch)
treec5bf8e27201430b922fb793e6293f78346a97bdf /src
parentfilesystem: Add CreateFactories methods to fs (diff)
downloadyuzu-bf33f80fae1e97f48a62e16b1e965d7994ac4c45.tar.gz
yuzu-bf33f80fae1e97f48a62e16b1e965d7994ac4c45.tar.xz
yuzu-bf33f80fae1e97f48a62e16b1e965d7994ac4c45.zip
vfs: Add GetOrCreateDirectoryRelative method
Diffstat (limited to 'src')
-rw-r--r--src/core/file_sys/bis_factory.cpp11
-rw-r--r--src/core/file_sys/vfs.cpp7
-rw-r--r--src/core/file_sys/vfs.h4
3 files changed, 13 insertions, 9 deletions
diff --git a/src/core/file_sys/bis_factory.cpp b/src/core/file_sys/bis_factory.cpp
index ae4e33800..08a7cea5a 100644
--- a/src/core/file_sys/bis_factory.cpp
+++ b/src/core/file_sys/bis_factory.cpp
@@ -6,19 +6,12 @@
6 6
7namespace FileSys { 7namespace FileSys {
8 8
9static VirtualDir GetOrCreateDirectory(const VirtualDir& dir, std::string_view path) {
10 const auto res = dir->GetDirectoryRelative(path);
11 if (res == nullptr)
12 return dir->CreateDirectoryRelative(path);
13 return res;
14}
15
16BISFactory::BISFactory(VirtualDir nand_root_) 9BISFactory::BISFactory(VirtualDir nand_root_)
17 : nand_root(std::move(nand_root_)), 10 : nand_root(std::move(nand_root_)),
18 sysnand_cache(std::make_shared<RegisteredCache>( 11 sysnand_cache(std::make_shared<RegisteredCache>(
19 GetOrCreateDirectory(nand_root, "/system/Contents/registered"))), 12 GetOrCreateDirectoryRelative(nand_root, "/system/Contents/registered"))),
20 usrnand_cache(std::make_shared<RegisteredCache>( 13 usrnand_cache(std::make_shared<RegisteredCache>(
21 GetOrCreateDirectory(nand_root, "/user/Contents/registered"))) {} 14 GetOrCreateDirectoryRelative(nand_root, "/user/Contents/registered"))) {}
22 15
23std::shared_ptr<RegisteredCache> BISFactory::GetSystemNANDContents() const { 16std::shared_ptr<RegisteredCache> BISFactory::GetSystemNANDContents() const {
24 return sysnand_cache; 17 return sysnand_cache;
diff --git a/src/core/file_sys/vfs.cpp b/src/core/file_sys/vfs.cpp
index b915b4c11..146c839f4 100644
--- a/src/core/file_sys/vfs.cpp
+++ b/src/core/file_sys/vfs.cpp
@@ -462,4 +462,11 @@ bool VfsRawCopy(VirtualFile src, VirtualFile dest) {
462 std::vector<u8> data = src->ReadAllBytes(); 462 std::vector<u8> data = src->ReadAllBytes();
463 return dest->WriteBytes(data, 0) == data.size(); 463 return dest->WriteBytes(data, 0) == data.size();
464} 464}
465
466VirtualDir GetOrCreateDirectoryRelative(const VirtualDir& rel, std::string_view path) {
467 const auto res = rel->GetDirectoryRelative(path);
468 if (res == nullptr)
469 return rel->CreateDirectoryRelative(path);
470 return res;
471}
465} // namespace FileSys 472} // namespace FileSys
diff --git a/src/core/file_sys/vfs.h b/src/core/file_sys/vfs.h
index 22db08b59..5142a3e86 100644
--- a/src/core/file_sys/vfs.h
+++ b/src/core/file_sys/vfs.h
@@ -318,4 +318,8 @@ bool DeepEquals(const VirtualFile& file1, const VirtualFile& file2, size_t block
318// directory of src/dest. 318// directory of src/dest.
319bool VfsRawCopy(VirtualFile src, VirtualFile dest); 319bool VfsRawCopy(VirtualFile src, VirtualFile dest);
320 320
321// Checks if the directory at path relative to rel exists. If it does, returns that. If it does not
322// it attempts to create it and returns the new dir or nullptr on failure.
323VirtualDir GetOrCreateDirectoryRelative(const VirtualDir& rel, std::string_view path);
324
321} // namespace FileSys 325} // namespace FileSys