diff options
author | Subv <subv2112@gmail.com> | 2018-03-04 19:03:58 +0100 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2018-03-04 20:30:07 +0100 |
commit | 0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902 (patch) | |
tree | d6fbf1e18b6b17fcb089306af26c48331100814c /src/core/file_sys | |
parent | Merge pull request #226 from Subv/buffer_queue_event (diff) | |
download | yuzu-0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902.tar yuzu-0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902.tar.gz yuzu-0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902.tar.bz2 yuzu-0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902.tar.lz yuzu-0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902.tar.xz yuzu-0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902.tar.zst yuzu-0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902.zip |
Diffstat (limited to 'src/core/file_sys')
-rw-r--r-- | src/core/file_sys/filesystem.h | 3 | ||||
-rw-r--r-- | src/core/file_sys/romfs_factory.cpp | 2 | ||||
-rw-r--r-- | src/core/file_sys/romfs_factory.h | 2 | ||||
-rw-r--r-- | src/core/file_sys/savedata_factory.cpp | 34 | ||||
-rw-r--r-- | src/core/file_sys/savedata_factory.h | 4 |
5 files changed, 30 insertions, 15 deletions
diff --git a/src/core/file_sys/filesystem.h b/src/core/file_sys/filesystem.h index df4e66a0b..94ad2abf2 100644 --- a/src/core/file_sys/filesystem.h +++ b/src/core/file_sys/filesystem.h @@ -183,10 +183,9 @@ public: /** * Deletes the archive contents and then re-creates the base folder * @param path Path to the archive - * @param format_info Format information for the new archive * @return ResultCode of the operation, 0 on success */ - virtual ResultCode Format(const Path& path, const FileSys::ArchiveFormatInfo& format_info) = 0; + virtual ResultCode Format(const Path& path) = 0; /** * Retrieves the format info about the archive with the specified path diff --git a/src/core/file_sys/romfs_factory.cpp b/src/core/file_sys/romfs_factory.cpp index e0de49f05..b21427948 100644 --- a/src/core/file_sys/romfs_factory.cpp +++ b/src/core/file_sys/romfs_factory.cpp @@ -23,7 +23,7 @@ ResultVal<std::unique_ptr<FileSystemBackend>> RomFS_Factory::Open(const Path& pa return MakeResult<std::unique_ptr<FileSystemBackend>>(std::move(archive)); } -ResultCode RomFS_Factory::Format(const Path& path, const FileSys::ArchiveFormatInfo& format_info) { +ResultCode RomFS_Factory::Format(const Path& path) { LOG_ERROR(Service_FS, "Unimplemented Format archive %s", GetName().c_str()); // TODO(bunnei): Find the right error code for this return ResultCode(-1); diff --git a/src/core/file_sys/romfs_factory.h b/src/core/file_sys/romfs_factory.h index 10ea13966..e0698e642 100644 --- a/src/core/file_sys/romfs_factory.h +++ b/src/core/file_sys/romfs_factory.h @@ -23,7 +23,7 @@ public: return "ArchiveFactory_RomFS"; } ResultVal<std::unique_ptr<FileSystemBackend>> Open(const Path& path) override; - ResultCode Format(const Path& path, const FileSys::ArchiveFormatInfo& format_info) override; + ResultCode Format(const Path& path) override; ResultVal<ArchiveFormatInfo> GetFormatInfo(const Path& path) const override; private: diff --git a/src/core/file_sys/savedata_factory.cpp b/src/core/file_sys/savedata_factory.cpp index 4d83e100f..c3329ce52 100644 --- a/src/core/file_sys/savedata_factory.cpp +++ b/src/core/file_sys/savedata_factory.cpp @@ -17,20 +17,26 @@ SaveData_Factory::SaveData_Factory(std::string nand_directory) : nand_directory(std::move(nand_directory)) {} ResultVal<std::unique_ptr<FileSystemBackend>> SaveData_Factory::Open(const Path& path) { - u64 title_id = Kernel::g_current_process->program_id; - // TODO(Subv): Somehow obtain this value. - u32 user = 0; - std::string save_directory = Common::StringFromFormat("%ssave/%016" PRIX64 "/%08X", - nand_directory.c_str(), title_id, user); + std::string save_directory = GetFullPath(); + // Return an error if the save data doesn't actually exist. + if (!FileUtil::IsDirectory(save_directory)) { + // TODO(Subv): Find out correct error code. + return ResultCode(-1); + } + auto archive = std::make_unique<Disk_FileSystem>(save_directory); return MakeResult<std::unique_ptr<FileSystemBackend>>(std::move(archive)); } -ResultCode SaveData_Factory::Format(const Path& path, - const FileSys::ArchiveFormatInfo& format_info) { - LOG_ERROR(Service_FS, "Unimplemented Format archive %s", GetName().c_str()); - // TODO(bunnei): Find the right error code for this - return ResultCode(-1); +ResultCode SaveData_Factory::Format(const Path& path) { + LOG_WARNING(Service_FS, "Format archive %s", GetName().c_str()); + // Create the save data directory. + if (!FileUtil::CreateFullPath(GetFullPath())) { + // TODO(Subv): Find the correct error code. + return ResultCode(-1); + } + + return RESULT_SUCCESS; } ResultVal<ArchiveFormatInfo> SaveData_Factory::GetFormatInfo(const Path& path) const { @@ -39,4 +45,12 @@ ResultVal<ArchiveFormatInfo> SaveData_Factory::GetFormatInfo(const Path& path) c return ResultCode(-1); } +std::string SaveData_Factory::GetFullPath() const { + u64 title_id = Kernel::g_current_process->program_id; + // TODO(Subv): Somehow obtain this value. + u32 user = 0; + return Common::StringFromFormat("%ssave/%016" PRIX64 "/%08X/", nand_directory.c_str(), title_id, + user); +} + } // namespace FileSys diff --git a/src/core/file_sys/savedata_factory.h b/src/core/file_sys/savedata_factory.h index 726743fde..73a42aab6 100644 --- a/src/core/file_sys/savedata_factory.h +++ b/src/core/file_sys/savedata_factory.h @@ -21,11 +21,13 @@ public: return "SaveData_Factory"; } ResultVal<std::unique_ptr<FileSystemBackend>> Open(const Path& path) override; - ResultCode Format(const Path& path, const FileSys::ArchiveFormatInfo& format_info) override; + ResultCode Format(const Path& path) override; ResultVal<ArchiveFormatInfo> GetFormatInfo(const Path& path) const override; private: std::string nand_directory; + + std::string GetFullPath() const; }; } // namespace FileSys |