diff options
| author | 2024-01-08 00:49:00 -0500 | |
|---|---|---|
| committer | 2024-01-11 11:28:52 -0500 | |
| commit | aae9eea53208fc0924c90ebb1272fcfaa3f23e0c (patch) | |
| tree | 050ccc76dd2fad3c3f81197aa6435674caeac86f /src/core/file_sys | |
| parent | Merge pull request #12608 from szepeviktor/typos (diff) | |
| download | yuzu-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.cpp | 17 | ||||
| -rw-r--r-- | src/core/file_sys/savedata_factory.h | 10 |
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 | ||
| 100 | SaveDataFactory::SaveDataFactory(Core::System& system_, VirtualDir save_directory_) | 100 | SaveDataFactory::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 | |||
| 118 | VirtualDir SaveDataFactory::Open(SaveDataSpaceId space, const SaveDataAttribute& meta) const { | 119 | VirtualDir 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 | ||
| 150 | std::string SaveDataFactory::GetFullPath(Core::System& system, VirtualDir dir, | 151 | std::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) | |||
| 201 | SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id, | 202 | SaveDataSize 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, | |||
| 220 | void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, | 221 | void 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 | ||
| 90 | using ProgramId = u64; | ||
| 91 | |||
| 90 | /// File system interface to the SaveData archive | 92 | /// File system interface to the SaveData archive |
| 91 | class SaveDataFactory { | 93 | class SaveDataFactory { |
| 92 | public: | 94 | public: |
| 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 | ||
| 112 | private: | 115 | private: |
| 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 | ||