summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2020-08-01 14:17:00 +0200
committerAdmiral H. Curtiss <pikachu025@gmail.com>2021-01-28 22:01:33 +0100
commitdaa76183edded04cc40a2bc57c331fff53f4c5bd (patch)
tree40df2ca7569ba889d4567280c7d372f1554ac740
parentc95f3cbb610e7660ab42f6dd45fa9145497aa3bc (diff)
GCMemcard: Let ImportFile() take a Savefile instead of a direntry and a vector of blocks.
-rw-r--r--Source/Core/Core/HW/GCMemcard/GCMemcard.cpp12
-rw-r--r--Source/Core/Core/HW/GCMemcard/GCMemcard.h4
-rw-r--r--Source/Core/DolphinQt/GCMemcardManager.cpp3
3 files changed, 10 insertions, 9 deletions
diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp
index 473a9d795d..931db7d119 100644
--- a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp
+++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp
@@ -834,12 +834,13 @@ GCMemcardGetSaveDataRetVal GCMemcard::GetSaveData(u8 index, std::vector<GCMBlock
return GCMemcardGetSaveDataRetVal::SUCCESS;
}
-GCMemcardImportFileRetVal GCMemcard::ImportFile(const DEntry& direntry,
- std::vector<GCMBlock>& saveBlocks)
+GCMemcardImportFileRetVal GCMemcard::ImportFile(const Savefile& savefile)
{
if (!m_valid)
return GCMemcardImportFileRetVal::NOMEMCARD;
+ const DEntry& direntry = savefile.dir_entry;
+
if (GetNumFiles() >= DIRLEN)
{
return GCMemcardImportFileRetVal::OUTOFDIRENTRIES;
@@ -876,8 +877,9 @@ GCMemcardImportFileRetVal GCMemcard::ImportFile(const DEntry& direntry,
int fileBlocks = direntry.m_block_count;
- FZEROGX_MakeSaveGameValid(m_header_block, direntry, saveBlocks);
- PSO_MakeSaveGameValid(m_header_block, direntry, saveBlocks);
+ std::vector<GCMBlock> blocks = savefile.blocks;
+ FZEROGX_MakeSaveGameValid(m_header_block, direntry, blocks);
+ PSO_MakeSaveGameValid(m_header_block, direntry, blocks);
BlockAlloc UpdatedBat = GetActiveBat();
u16 nextBlock;
@@ -886,7 +888,7 @@ GCMemcardImportFileRetVal GCMemcard::ImportFile(const DEntry& direntry,
{
if (firstBlock == 0xFFFF)
PanicAlertFmt("Fatal Error");
- m_data_blocks[firstBlock - MC_FST_BLOCKS] = saveBlocks[i];
+ m_data_blocks[firstBlock - MC_FST_BLOCKS] = blocks[i];
if (i == fileBlocks - 1)
nextBlock = 0xFFFF;
else
diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.h b/Source/Core/Core/HW/GCMemcard/GCMemcard.h
index ca8c709716..0cea51a017 100644
--- a/Source/Core/Core/HW/GCMemcard/GCMemcard.h
+++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.h
@@ -481,8 +481,8 @@ public:
GCMemcardGetSaveDataRetVal GetSaveData(u8 index, std::vector<GCMBlock>& saveBlocks) const;
- // adds the file to the directory and copies its contents
- GCMemcardImportFileRetVal ImportFile(const DEntry& direntry, std::vector<GCMBlock>& saveBlocks);
+ // Adds the given savefile to the memory card, if possible.
+ GCMemcardImportFileRetVal ImportFile(const Savefile& savefile);
// Fetches the savefile at the given directory index, if any.
std::optional<Savefile> ExportFile(u8 index) const;
diff --git a/Source/Core/DolphinQt/GCMemcardManager.cpp b/Source/Core/DolphinQt/GCMemcardManager.cpp
index 6c05dd4b93..0edc29d8e5 100644
--- a/Source/Core/DolphinQt/GCMemcardManager.cpp
+++ b/Source/Core/DolphinQt/GCMemcardManager.cpp
@@ -503,8 +503,7 @@ void GCMemcardManager::ImportFiles(int slot, const std::vector<Memcard::Savefile
for (const Memcard::Savefile& savefile : savefiles)
{
- std::vector<Memcard::GCMBlock> blocks(savefile.blocks);
- const auto result = card->ImportFile(savefile.dir_entry, blocks);
+ const auto result = card->ImportFile(savefile);
// we've already checked everything that could realistically fail here, so this should only
// happen if the memory card data is corrupted in some way