From 3e7f537a9d40a142e46a5c0d0d7f84fde5444a32 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Wed, 15 Jul 2020 23:59:17 +0200 Subject: [PATCH] GCMemcard: Implement ExportFile() to get a file on a card with a single method call. --- Source/Core/Core/HW/GCMemcard/GCMemcard.cpp | 16 ++++++++++++++++ Source/Core/Core/HW/GCMemcard/GCMemcard.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp index 27382a8a48..8785c9736d 100644 --- a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp +++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp @@ -909,6 +909,22 @@ GCMemcardImportFileRetVal GCMemcard::ImportFile(const DEntry& direntry, return GCMemcardImportFileRetVal::SUCCESS; } +std::optional GCMemcard::ExportFile(u8 index) const +{ + if (!m_valid || index >= DIRLEN) + return std::nullopt; + + Savefile savefile; + savefile.dir_entry = GetActiveDirectory().m_dir_entries[index]; + if (savefile.dir_entry.m_gamecode == DEntry::UNINITIALIZED_GAMECODE) + return std::nullopt; + + if (GetSaveData(index, savefile.blocks) != GCMemcardGetSaveDataRetVal::SUCCESS) + return std::nullopt; + + return savefile; +} + GCMemcardRemoveFileRetVal GCMemcard::RemoveFile(u8 index) // index in the directory array { if (!m_valid) diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.h b/Source/Core/Core/HW/GCMemcard/GCMemcard.h index ffa3697119..5c2d431123 100644 --- a/Source/Core/Core/HW/GCMemcard/GCMemcard.h +++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.h @@ -505,6 +505,9 @@ public: // adds the file to the directory and copies its contents GCMemcardImportFileRetVal ImportFile(const DEntry& direntry, std::vector& saveBlocks); + // Fetches the savefile at the given directory index, if any. + std::optional ExportFile(u8 index) const; + // delete a file from the directory GCMemcardRemoveFileRetVal RemoveFile(u8 index);