summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/file_sys/savedata_factory.cpp18
-rw-r--r--src/core/file_sys/savedata_factory.h11
-rw-r--r--src/core/hle/service/filesystem/filesystem.cpp3
-rw-r--r--src/yuzu/main.cpp4
4 files changed, 22 insertions, 14 deletions
diff --git a/src/core/file_sys/savedata_factory.cpp b/src/core/file_sys/savedata_factory.cpp
index ba4efee3a..b7bfe0928 100644
--- a/src/core/file_sys/savedata_factory.cpp
+++ b/src/core/file_sys/savedata_factory.cpp
@@ -70,7 +70,8 @@ std::string SaveDataAttribute::DebugInfo() const {
70 static_cast<u8>(rank), index); 70 static_cast<u8>(rank), index);
71} 71}
72 72
73SaveDataFactory::SaveDataFactory(VirtualDir save_directory) : dir(std::move(save_directory)) { 73SaveDataFactory::SaveDataFactory(Core::System& system_, VirtualDir save_directory_)
74 : dir{std::move(save_directory_)}, system{system_} {
74 // Delete all temporary storages 75 // Delete all temporary storages
75 // On hardware, it is expected that temporary storage be empty at first use. 76 // On hardware, it is expected that temporary storage be empty at first use.
76 dir->DeleteSubdirectoryRecursive("temp"); 77 dir->DeleteSubdirectoryRecursive("temp");
@@ -83,7 +84,7 @@ ResultVal<VirtualDir> SaveDataFactory::Create(SaveDataSpaceId space,
83 PrintSaveDataAttributeWarnings(meta); 84 PrintSaveDataAttributeWarnings(meta);
84 85
85 const auto save_directory = 86 const auto save_directory =
86 GetFullPath(space, meta.type, meta.title_id, meta.user_id, meta.save_id); 87 GetFullPath(system, space, meta.type, meta.title_id, meta.user_id, meta.save_id);
87 88
88 auto out = dir->CreateDirectoryRelative(save_directory); 89 auto out = dir->CreateDirectoryRelative(save_directory);
89 90
@@ -100,7 +101,7 @@ ResultVal<VirtualDir> SaveDataFactory::Open(SaveDataSpaceId space,
100 const SaveDataAttribute& meta) const { 101 const SaveDataAttribute& meta) const {
101 102
102 const auto save_directory = 103 const auto save_directory =
103 GetFullPath(space, meta.type, meta.title_id, meta.user_id, meta.save_id); 104 GetFullPath(system, space, meta.type, meta.title_id, meta.user_id, meta.save_id);
104 105
105 auto out = dir->GetDirectoryRelative(save_directory); 106 auto out = dir->GetDirectoryRelative(save_directory);
106 107
@@ -135,13 +136,14 @@ std::string SaveDataFactory::GetSaveDataSpaceIdPath(SaveDataSpaceId space) {
135 } 136 }
136} 137}
137 138
138std::string SaveDataFactory::GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, 139std::string SaveDataFactory::GetFullPath(Core::System& system, SaveDataSpaceId space,
139 u128 user_id, u64 save_id) { 140 SaveDataType type, u64 title_id, u128 user_id,
141 u64 save_id) {
140 // According to switchbrew, if a save is of type SaveData and the title id field is 0, it should 142 // According to switchbrew, if a save is of type SaveData and the title id field is 0, it should
141 // be interpreted as the title id of the current process. 143 // be interpreted as the title id of the current process.
142 if (type == SaveDataType::SaveData || type == SaveDataType::DeviceSaveData) { 144 if (type == SaveDataType::SaveData || type == SaveDataType::DeviceSaveData) {
143 if (title_id == 0) { 145 if (title_id == 0) {
144 title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID(); 146 title_id = system.CurrentProcess()->GetTitleID();
145 } 147 }
146 } 148 }
147 149
@@ -167,7 +169,7 @@ std::string SaveDataFactory::GetFullPath(SaveDataSpaceId space, SaveDataType typ
167 169
168SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id, 170SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,
169 u128 user_id) const { 171 u128 user_id) const {
170 const auto path = GetFullPath(SaveDataSpaceId::NandUser, type, title_id, user_id, 0); 172 const auto path = GetFullPath(system, SaveDataSpaceId::NandUser, type, title_id, user_id, 0);
171 const auto dir = GetOrCreateDirectoryRelative(this->dir, path); 173 const auto dir = GetOrCreateDirectoryRelative(this->dir, path);
172 174
173 const auto size_file = dir->GetFile(SAVE_DATA_SIZE_FILENAME); 175 const auto size_file = dir->GetFile(SAVE_DATA_SIZE_FILENAME);
@@ -182,7 +184,7 @@ SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,
182 184
183void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, 185void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id,
184 SaveDataSize new_value) const { 186 SaveDataSize new_value) const {
185 const auto path = GetFullPath(SaveDataSpaceId::NandUser, type, title_id, user_id, 0); 187 const auto path = GetFullPath(system, SaveDataSpaceId::NandUser, type, title_id, user_id, 0);
186 const auto dir = GetOrCreateDirectoryRelative(this->dir, path); 188 const auto dir = GetOrCreateDirectoryRelative(this->dir, path);
187 189
188 const auto size_file = dir->CreateFile(SAVE_DATA_SIZE_FILENAME); 190 const auto size_file = dir->CreateFile(SAVE_DATA_SIZE_FILENAME);
diff --git a/src/core/file_sys/savedata_factory.h b/src/core/file_sys/savedata_factory.h
index 6625bbbd8..17f774baa 100644
--- a/src/core/file_sys/savedata_factory.h
+++ b/src/core/file_sys/savedata_factory.h
@@ -12,6 +12,10 @@
12#include "core/file_sys/vfs.h" 12#include "core/file_sys/vfs.h"
13#include "core/hle/result.h" 13#include "core/hle/result.h"
14 14
15namespace Core {
16class System;
17}
18
15namespace FileSys { 19namespace FileSys {
16 20
17enum class SaveDataSpaceId : u8 { 21enum class SaveDataSpaceId : u8 {
@@ -84,7 +88,7 @@ struct SaveDataSize {
84/// File system interface to the SaveData archive 88/// File system interface to the SaveData archive
85class SaveDataFactory { 89class SaveDataFactory {
86public: 90public:
87 explicit SaveDataFactory(VirtualDir dir); 91 explicit SaveDataFactory(Core::System& system_, VirtualDir save_directory_);
88 ~SaveDataFactory(); 92 ~SaveDataFactory();
89 93
90 ResultVal<VirtualDir> Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const; 94 ResultVal<VirtualDir> Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const;
@@ -93,8 +97,8 @@ public:
93 VirtualDir GetSaveDataSpaceDirectory(SaveDataSpaceId space) const; 97 VirtualDir GetSaveDataSpaceDirectory(SaveDataSpaceId space) const;
94 98
95 static std::string GetSaveDataSpaceIdPath(SaveDataSpaceId space); 99 static std::string GetSaveDataSpaceIdPath(SaveDataSpaceId space);
96 static std::string GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, 100 static std::string GetFullPath(Core::System& system, SaveDataSpaceId space, SaveDataType type,
97 u128 user_id, u64 save_id); 101 u64 title_id, u128 user_id, u64 save_id);
98 102
99 SaveDataSize ReadSaveDataSize(SaveDataType type, u64 title_id, u128 user_id) const; 103 SaveDataSize ReadSaveDataSize(SaveDataType type, u64 title_id, u128 user_id) const;
100 void WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, 104 void WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id,
@@ -102,6 +106,7 @@ public:
102 106
103private: 107private:
104 VirtualDir dir; 108 VirtualDir dir;
109 Core::System& system;
105}; 110};
106 111
107} // namespace FileSys 112} // namespace FileSys
diff --git a/src/core/hle/service/filesystem/filesystem.cpp b/src/core/hle/service/filesystem/filesystem.cpp
index af97561e4..ca93062cf 100644
--- a/src/core/hle/service/filesystem/filesystem.cpp
+++ b/src/core/hle/service/filesystem/filesystem.cpp
@@ -717,7 +717,8 @@ void FileSystemController::CreateFactories(FileSys::VfsFilesystem& vfs, bool ove
717 } 717 }
718 718
719 if (save_data_factory == nullptr) { 719 if (save_data_factory == nullptr) {
720 save_data_factory = std::make_unique<FileSys::SaveDataFactory>(std::move(nand_directory)); 720 save_data_factory =
721 std::make_unique<FileSys::SaveDataFactory>(system, std::move(nand_directory));
721 } 722 }
722 723
723 if (sdmc_factory == nullptr) { 724 if (sdmc_factory == nullptr) {
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 805619ccf..07fa85741 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -1342,12 +1342,12 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target
1342 const auto user_id = manager.GetUser(static_cast<std::size_t>(index)); 1342 const auto user_id = manager.GetUser(static_cast<std::size_t>(index));
1343 ASSERT(user_id); 1343 ASSERT(user_id);
1344 path = nand_dir + FileSys::SaveDataFactory::GetFullPath( 1344 path = nand_dir + FileSys::SaveDataFactory::GetFullPath(
1345 FileSys::SaveDataSpaceId::NandUser, 1345 system, FileSys::SaveDataSpaceId::NandUser,
1346 FileSys::SaveDataType::SaveData, program_id, user_id->uuid, 0); 1346 FileSys::SaveDataType::SaveData, program_id, user_id->uuid, 0);
1347 } else { 1347 } else {
1348 // Device save data 1348 // Device save data
1349 path = nand_dir + FileSys::SaveDataFactory::GetFullPath( 1349 path = nand_dir + FileSys::SaveDataFactory::GetFullPath(
1350 FileSys::SaveDataSpaceId::NandUser, 1350 system, FileSys::SaveDataSpaceId::NandUser,
1351 FileSys::SaveDataType::SaveData, program_id, {}, 0); 1351 FileSys::SaveDataType::SaveData, program_id, {}, 0);
1352 } 1352 }
1353 1353