From 0eefe6e4d15cbc7a5902dfbe5e7742ef4ea71902 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 4 Mar 2018 13:03:58 -0500 Subject: FS: Make EnsureSaveData create the savedata folder when called for the first time. --- src/core/file_sys/savedata_factory.cpp | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'src/core/file_sys/savedata_factory.cpp') 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> 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(save_directory); return MakeResult>(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 SaveData_Factory::GetFormatInfo(const Path& path) const { @@ -39,4 +45,12 @@ ResultVal 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 -- cgit v1.2.3