diff options
| author | Chloe <25727384+ogniK5377@users.noreply.github.com> | 2020-11-28 02:33:42 +1100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-28 02:33:42 +1100 | 
| commit | f397edff0ea6711bac15cfe47a0157e9b790b8bb (patch) | |
| tree | a12109a226823b444d7261f25e256777af6b93e4 | |
| parent | ee5e77fbf97da699e5ded623c12cad56dd7ce0da (diff) | |
| parent | 073e07ae2d0eab9dfdcc4f5b3ea79f4f810dd081 (diff) | |
Merge pull request #5023 from lioncash/save-global
savedata_factory: Eliminate usage of the global system instance
| -rw-r--r-- | src/core/file_sys/savedata_factory.cpp | 18 | ||||
| -rw-r--r-- | src/core/file_sys/savedata_factory.h | 11 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/filesystem.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 4 | 
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 {                         static_cast<u8>(rank), index);  } -SaveDataFactory::SaveDataFactory(VirtualDir save_directory) : dir(std::move(save_directory)) { +SaveDataFactory::SaveDataFactory(Core::System& system_, VirtualDir save_directory_) +    : dir{std::move(save_directory_)}, system{system_} {      // Delete all temporary storages      // On hardware, it is expected that temporary storage be empty at first use.      dir->DeleteSubdirectoryRecursive("temp"); @@ -83,7 +84,7 @@ ResultVal<VirtualDir> SaveDataFactory::Create(SaveDataSpaceId space,      PrintSaveDataAttributeWarnings(meta);      const auto save_directory = -        GetFullPath(space, meta.type, meta.title_id, meta.user_id, meta.save_id); +        GetFullPath(system, space, meta.type, meta.title_id, meta.user_id, meta.save_id);      auto out = dir->CreateDirectoryRelative(save_directory); @@ -100,7 +101,7 @@ ResultVal<VirtualDir> SaveDataFactory::Open(SaveDataSpaceId space,                                              const SaveDataAttribute& meta) const {      const auto save_directory = -        GetFullPath(space, meta.type, meta.title_id, meta.user_id, meta.save_id); +        GetFullPath(system, space, meta.type, meta.title_id, meta.user_id, meta.save_id);      auto out = dir->GetDirectoryRelative(save_directory); @@ -135,13 +136,14 @@ std::string SaveDataFactory::GetSaveDataSpaceIdPath(SaveDataSpaceId space) {      }  } -std::string SaveDataFactory::GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, -                                         u128 user_id, u64 save_id) { +std::string SaveDataFactory::GetFullPath(Core::System& system, SaveDataSpaceId space, +                                         SaveDataType type, u64 title_id, u128 user_id, +                                         u64 save_id) {      // According to switchbrew, if a save is of type SaveData and the title id field is 0, it should      // be interpreted as the title id of the current process.      if (type == SaveDataType::SaveData || type == SaveDataType::DeviceSaveData) {          if (title_id == 0) { -            title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID(); +            title_id = system.CurrentProcess()->GetTitleID();          }      } @@ -167,7 +169,7 @@ std::string SaveDataFactory::GetFullPath(SaveDataSpaceId space, SaveDataType typ  SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,                                                 u128 user_id) const { -    const auto path = GetFullPath(SaveDataSpaceId::NandUser, type, title_id, user_id, 0); +    const auto path = GetFullPath(system, SaveDataSpaceId::NandUser, type, title_id, user_id, 0);      const auto dir = GetOrCreateDirectoryRelative(this->dir, path);      const auto size_file = dir->GetFile(SAVE_DATA_SIZE_FILENAME); @@ -182,7 +184,7 @@ SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id,  void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id,                                          SaveDataSize new_value) const { -    const auto path = GetFullPath(SaveDataSpaceId::NandUser, type, title_id, user_id, 0); +    const auto path = GetFullPath(system, SaveDataSpaceId::NandUser, type, title_id, user_id, 0);      const auto dir = GetOrCreateDirectoryRelative(this->dir, path);      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 @@  #include "core/file_sys/vfs.h"  #include "core/hle/result.h" +namespace Core { +class System; +} +  namespace FileSys {  enum class SaveDataSpaceId : u8 { @@ -84,7 +88,7 @@ struct SaveDataSize {  /// File system interface to the SaveData archive  class SaveDataFactory {  public: -    explicit SaveDataFactory(VirtualDir dir); +    explicit SaveDataFactory(Core::System& system_, VirtualDir save_directory_);      ~SaveDataFactory();      ResultVal<VirtualDir> Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const; @@ -93,8 +97,8 @@ public:      VirtualDir GetSaveDataSpaceDirectory(SaveDataSpaceId space) const;      static std::string GetSaveDataSpaceIdPath(SaveDataSpaceId space); -    static std::string GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, -                                   u128 user_id, u64 save_id); +    static std::string GetFullPath(Core::System& system, SaveDataSpaceId space, SaveDataType type, +                                   u64 title_id, u128 user_id, u64 save_id);      SaveDataSize ReadSaveDataSize(SaveDataType type, u64 title_id, u128 user_id) const;      void WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, @@ -102,6 +106,7 @@ public:  private:      VirtualDir dir; +    Core::System& system;  };  } // 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      }      if (save_data_factory == nullptr) { -        save_data_factory = std::make_unique<FileSys::SaveDataFactory>(std::move(nand_directory)); +        save_data_factory = +            std::make_unique<FileSys::SaveDataFactory>(system, std::move(nand_directory));      }      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              const auto user_id = manager.GetUser(static_cast<std::size_t>(index));              ASSERT(user_id);              path = nand_dir + FileSys::SaveDataFactory::GetFullPath( -                                  FileSys::SaveDataSpaceId::NandUser, +                                  system, FileSys::SaveDataSpaceId::NandUser,                                    FileSys::SaveDataType::SaveData, program_id, user_id->uuid, 0);          } else {              // Device save data              path = nand_dir + FileSys::SaveDataFactory::GetFullPath( -                                  FileSys::SaveDataSpaceId::NandUser, +                                  system, FileSys::SaveDataSpaceId::NandUser,                                    FileSys::SaveDataType::SaveData, program_id, {}, 0);          }  | 
