summaryrefslogtreecommitdiff
path: root/src/core/file_sys
diff options
context:
space:
mode:
authorGravatar Liam2024-01-08 00:49:00 -0500
committerGravatar Liam2024-01-11 11:28:52 -0500
commitaae9eea53208fc0924c90ebb1272fcfaa3f23e0c (patch)
tree050ccc76dd2fad3c3f81197aa6435674caeac86f /src/core/file_sys
parentMerge pull request #12608 from szepeviktor/typos (diff)
downloadyuzu-aae9eea53208fc0924c90ebb1272fcfaa3f23e0c.tar.gz
yuzu-aae9eea53208fc0924c90ebb1272fcfaa3f23e0c.tar.xz
yuzu-aae9eea53208fc0924c90ebb1272fcfaa3f23e0c.zip
fsp-srv: use program registry for SetCurrentProcess
Diffstat (limited to 'src/core/file_sys')
-rw-r--r--src/core/file_sys/savedata_factory.cpp17
-rw-r--r--src/core/file_sys/savedata_factory.h10
2 files changed, 16 insertions, 11 deletions
diff --git a/src/core/file_sys/savedata_factory.cpp b/src/core/file_sys/savedata_factory.cpp
index 12b3bd797..23196cd5f 100644
--- a/src/core/file_sys/savedata_factory.cpp
+++ b/src/core/file_sys/savedata_factory.cpp
@@ -97,8 +97,9 @@ std::string SaveDataAttribute::DebugInfo() const {
97 static_cast<u8>(rank), index); 97 static_cast<u8>(rank), index);
98} 98}
99 99
100SaveDataFactory::SaveDataFactory(Core::System& system_, VirtualDir save_directory_) 100SaveDataFactory::SaveDataFactory(Core::System& system_, ProgramId program_id_,
101 : dir{std::move(save_directory_)}, system{system_} { 101 VirtualDir save_directory_)
102 : system{system_}, program_id{program_id_}, dir{std::move(save_directory_)} {
102 // Delete all temporary storages 103 // Delete all temporary storages
103 // On hardware, it is expected that temporary storage be empty at first use. 104 // On hardware, it is expected that temporary storage be empty at first use.
104 dir->DeleteSubdirectoryRecursive("temp"); 105 dir->DeleteSubdirectoryRecursive("temp");
@@ -110,7 +111,7 @@ VirtualDir SaveDataFactory::Create(SaveDataSpaceId space, const SaveDataAttribut
110 PrintSaveDataAttributeWarnings(meta); 111 PrintSaveDataAttributeWarnings(meta);
111 112
112 const auto save_directory = 113 const auto save_directory =
113 GetFullPath(system, dir, space, meta.type, meta.title_id, meta.user_id, meta.save_id); 114 GetFullPath(program_id, dir, space, meta.type, meta.title_id, meta.user_id, meta.save_id);
114 115
115 return dir->CreateDirectoryRelative(save_directory); 116 return dir->CreateDirectoryRelative(save_directory);
116} 117}
@@ -118,7 +119,7 @@ VirtualDir SaveDataFactory::Create(SaveDataSpaceId space, const SaveDataAttribut
118VirtualDir SaveDataFactory::Open(SaveDataSpaceId space, const SaveDataAttribute& meta) const { 119VirtualDir SaveDataFactory::Open(SaveDataSpaceId space, const SaveDataAttribute& meta) const {
119 120
120 const auto save_directory = 121 const auto save_directory =
121 GetFullPath(system, dir, space, meta.type, meta.title_id, meta.user_id, meta.save_id); 122 GetFullPath(program_id, dir, space, meta.type, meta.title_id, meta.user_id, meta.save_id);
122 123
123 auto out = dir->GetDirectoryRelative(save_directory); 124 auto out = dir->GetDirectoryRelative(save_directory);
124 125
@@ -147,14 +148,14 @@ std::string SaveDataFactory::GetSaveDataSpaceIdPath(SaveDataSpaceId space) {
147 } 148 }
148} 149}
149 150
150std::string SaveDataFactory::GetFullPath(Core::System& system, VirtualDir dir, 151std::string SaveDataFactory::GetFullPath(ProgramId program_id, VirtualDir dir,
151 SaveDataSpaceId space, SaveDataType type, u64 title_id, 152 SaveDataSpaceId space, SaveDataType type, u64 title_id,
152 u128 user_id, u64 save_id) { 153 u128 user_id, u64 save_id) {
153 // According to switchbrew, if a save is of type SaveData and the title id field is 0, it should 154 // According to switchbrew, if a save is of type SaveData and the title id field is 0, it should
154 // be interpreted as the title id of the current process. 155 // be interpreted as the title id of the current process.
155 if (type == SaveDataType::SaveData || type == SaveDataType::DeviceSaveData) { 156 if (type == SaveDataType::SaveData || type == SaveDataType::DeviceSaveData) {
156 if (title_id == 0) { 157 if (title_id == 0) {
157 title_id = system.GetApplicationProcessProgramID(); 158 title_id = program_id;
158 } 159 }
159 } 160 }
160 161
@@ -201,7 +202,7 @@ std::string SaveDataFactory::GetUserGameSaveDataRoot(u128 user_id, bool future)
201SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id, 202SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,
202 u128 user_id) const { 203 u128 user_id) const {
203 const auto path = 204 const auto path =
204 GetFullPath(system, dir, SaveDataSpaceId::NandUser, type, title_id, user_id, 0); 205 GetFullPath(program_id, dir, SaveDataSpaceId::NandUser, type, title_id, user_id, 0);
205 const auto relative_dir = GetOrCreateDirectoryRelative(dir, path); 206 const auto relative_dir = GetOrCreateDirectoryRelative(dir, path);
206 207
207 const auto size_file = relative_dir->GetFile(GetSaveDataSizeFileName()); 208 const auto size_file = relative_dir->GetFile(GetSaveDataSizeFileName());
@@ -220,7 +221,7 @@ SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,
220void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, 221void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id,
221 SaveDataSize new_value) const { 222 SaveDataSize new_value) const {
222 const auto path = 223 const auto path =
223 GetFullPath(system, dir, SaveDataSpaceId::NandUser, type, title_id, user_id, 0); 224 GetFullPath(program_id, dir, SaveDataSpaceId::NandUser, type, title_id, user_id, 0);
224 const auto relative_dir = GetOrCreateDirectoryRelative(dir, path); 225 const auto relative_dir = GetOrCreateDirectoryRelative(dir, path);
225 226
226 const auto size_file = relative_dir->CreateFile(GetSaveDataSizeFileName()); 227 const auto size_file = relative_dir->CreateFile(GetSaveDataSizeFileName());
diff --git a/src/core/file_sys/savedata_factory.h b/src/core/file_sys/savedata_factory.h
index fd4887e99..30d96928e 100644
--- a/src/core/file_sys/savedata_factory.h
+++ b/src/core/file_sys/savedata_factory.h
@@ -87,10 +87,13 @@ constexpr const char* GetSaveDataSizeFileName() {
87 return ".yuzu_save_size"; 87 return ".yuzu_save_size";
88} 88}
89 89
90using ProgramId = u64;
91
90/// File system interface to the SaveData archive 92/// File system interface to the SaveData archive
91class SaveDataFactory { 93class SaveDataFactory {
92public: 94public:
93 explicit SaveDataFactory(Core::System& system_, VirtualDir save_directory_); 95 explicit SaveDataFactory(Core::System& system_, ProgramId program_id_,
96 VirtualDir save_directory_);
94 ~SaveDataFactory(); 97 ~SaveDataFactory();
95 98
96 VirtualDir Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const; 99 VirtualDir Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const;
@@ -99,7 +102,7 @@ public:
99 VirtualDir GetSaveDataSpaceDirectory(SaveDataSpaceId space) const; 102 VirtualDir GetSaveDataSpaceDirectory(SaveDataSpaceId space) const;
100 103
101 static std::string GetSaveDataSpaceIdPath(SaveDataSpaceId space); 104 static std::string GetSaveDataSpaceIdPath(SaveDataSpaceId space);
102 static std::string GetFullPath(Core::System& system, VirtualDir dir, SaveDataSpaceId space, 105 static std::string GetFullPath(ProgramId program_id, VirtualDir dir, SaveDataSpaceId space,
103 SaveDataType type, u64 title_id, u128 user_id, u64 save_id); 106 SaveDataType type, u64 title_id, u128 user_id, u64 save_id);
104 static std::string GetUserGameSaveDataRoot(u128 user_id, bool future); 107 static std::string GetUserGameSaveDataRoot(u128 user_id, bool future);
105 108
@@ -110,8 +113,9 @@ public:
110 void SetAutoCreate(bool state); 113 void SetAutoCreate(bool state);
111 114
112private: 115private:
113 VirtualDir dir;
114 Core::System& system; 116 Core::System& system;
117 ProgramId program_id;
118 VirtualDir dir;
115 bool auto_create{true}; 119 bool auto_create{true};
116}; 120};
117 121