From fe9167ee662675931b14efe0b8501e2ffa11f1e1 Mon Sep 17 00:00:00 2001 From: Ada Date: Fri, 8 Mar 2024 22:05:26 +0000 Subject: [PATCH] return NotFormatted on non-shared NAND archive (??) --- include/fs/archive_ext_save_data.hpp | 5 +++-- src/core/fs/archive_ext_save_data.cpp | 2 +- src/core/services/fs.cpp | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/include/fs/archive_ext_save_data.hpp b/include/fs/archive_ext_save_data.hpp index 05a04682..1d1c54b4 100644 --- a/include/fs/archive_ext_save_data.hpp +++ b/include/fs/archive_ext_save_data.hpp @@ -13,8 +13,8 @@ struct ExtSaveDataInfo { class ExtSaveDataArchive : public ArchiveBase { public: - ExtSaveDataArchive(Memory& mem, const std::string& folder, u64 saveId, bool isShared = false) : ArchiveBase(mem), - archiveSaveId(saveId), isShared(isShared), backingFolder(folder) {} + ExtSaveDataArchive(Memory& mem, const std::string& folder, u64 saveId, bool isShared = false, bool isNAND = false) : ArchiveBase(mem), + archiveSaveId(saveId), isShared(isShared), isNAND(isNAND), backingFolder(folder) {} u64 getFreeBytes() override { Helpers::panic("ExtSaveData::GetFreeBytes unimplemented"); return 0; } std::string name() override { return "ExtSaveData::" + backingFolder + "::" + std::to_string(archiveSaveId); } @@ -43,5 +43,6 @@ public: u64 archiveSaveId = 0; bool isShared = false; + bool isNAND = false; std::string backingFolder; // Backing folder for the archive. Can be NAND, Gamecard or SD depending on the archive path. }; diff --git a/src/core/fs/archive_ext_save_data.cpp b/src/core/fs/archive_ext_save_data.cpp index e5fc1719..8d3c90d9 100644 --- a/src/core/fs/archive_ext_save_data.cpp +++ b/src/core/fs/archive_ext_save_data.cpp @@ -296,7 +296,7 @@ Rust::Result ExtSaveDataArchive::openArchive(const const fs::path formatInfoPath = getFormatInfoPath(path); // Format info not found so the archive is not formatted if (!fs::is_regular_file(formatInfoPath)) { - return Err(Result::FS::NotFoundInvalid); + return isNAND ? Err(Result::FS::NotFormatted) : Err(Result::FS::NotFoundInvalid); } return Ok((ArchiveBase*)this); diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp index ed084ff1..e4cf633b 100644 --- a/src/core/services/fs.cpp +++ b/src/core/services/fs.cpp @@ -96,14 +96,14 @@ void FSService::initializeFilesystem() { ExtSaveDataArchive* FSService::getExtArchiveFromID(u64 saveId, bool isShared) { if (const auto entry = extSaveData_sdmc.find(saveId); entry == extSaveData_sdmc.end()) { - extSaveData_sdmc.emplace(saveId, ExtSaveDataArchive(mem, isShared ? "../SharedFiles/SDMC" : "SDMC", saveId, isShared)); + extSaveData_sdmc.emplace(saveId, ExtSaveDataArchive(mem, isShared ? "../SharedFiles/SDMC" : "SDMC", saveId, isShared, false)); } return &extSaveData_sdmc.at(saveId); } ExtSaveDataArchive* FSService::getNANDExtArchiveFromID(u64 saveId, bool isShared) { if (const auto entry = nandExtSaveData_nand.find(saveId); entry == nandExtSaveData_nand.end()) { - nandExtSaveData_nand.emplace(saveId, ExtSaveDataArchive(mem, isShared ? "../SharedFiles/NAND" : "NAND", saveId, isShared)); + nandExtSaveData_nand.emplace(saveId, ExtSaveDataArchive(mem, isShared ? "../SharedFiles/NAND" : "NAND", saveId, isShared, true)); } return &nandExtSaveData_nand.at(saveId); }