diff options
author | Subv <subv2112@gmail.com> | 2014-12-29 13:04:37 -0500 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2014-12-29 22:29:55 -0500 |
commit | 2c89d4d5cd4e308b04cebb1c9bca48e12f0945da (patch) | |
tree | ea0a85e43943ba76418f27a68572e8602dbd9839 /src/core/file_sys/archive_savedata.cpp | |
parent | 3d14eb285382740b144e5b047cb2ad072f6129ea (diff) |
Archives: Implemented ExtSaveData and SharedExtSaveData
They will be stored in /extsavedata/SDMC and /extsavedata/NAND respectively.
Also redirect some APT_A functions to their APT_U equivalents.
Implemented the gamecoin.dat file in SharedExtSaveData in the PTM module.
Implemented formatting the savegame.
Retake a previous savegame if it exists instead of reporting them as not formatted every time a game is loaded.
Diffstat (limited to 'src/core/file_sys/archive_savedata.cpp')
-rw-r--r-- | src/core/file_sys/archive_savedata.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/core/file_sys/archive_savedata.cpp b/src/core/file_sys/archive_savedata.cpp index 97853567..280d4ff5 100644 --- a/src/core/file_sys/archive_savedata.cpp +++ b/src/core/file_sys/archive_savedata.cpp @@ -16,18 +16,29 @@ namespace FileSys { -Archive_SaveData::Archive_SaveData(const std::string& mount_point, u64 program_id) - : DiskArchive(mount_point + Common::StringFromFormat("%016X", program_id) + DIR_SEP) { +Archive_SaveData::Archive_SaveData(const std::string& mount_point) + : DiskArchive(mount_point) { LOG_INFO(Service_FS, "Directory %s set as SaveData.", this->mount_point.c_str()); } -bool Archive_SaveData::Initialize() { - if (!FileUtil::CreateFullPath(mount_point)) { - LOG_ERROR(Service_FS, "Unable to create SaveData path."); - return false; +ResultCode Archive_SaveData::Open(const Path& path) { + if (concrete_mount_point.empty()) + concrete_mount_point = Common::StringFromFormat("%s%016X", mount_point.c_str(), Kernel::g_program_id) + DIR_SEP; + if (!FileUtil::Exists(concrete_mount_point)) { + // When a SaveData archive is created for the first time, it is not yet formatted + // and the save file/directory structure expected by the game has not yet been initialized. + // Returning the NotFormatted error code will signal the game to provision the SaveData archive + // with the files and folders that it expects. + return ResultCode(ErrorDescription::FS_NotFormatted, ErrorModule::FS, + ErrorSummary::InvalidState, ErrorLevel::Status); } + return RESULT_SUCCESS; +} - return true; +ResultCode Archive_SaveData::Format(const Path& path) const { + FileUtil::DeleteDirRecursively(concrete_mount_point); + FileUtil::CreateFullPath(concrete_mount_point); + return RESULT_SUCCESS; } } // namespace FileSys |