diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp index 544c934716..c23a8aeb97 100644 --- a/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp +++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp @@ -371,7 +371,7 @@ u8 GCMemcard::TitlePresent(const DEntry& d) const while (i < DIRLEN) { if ((BE32(CurrentDir->m_dir_entries[i].m_gamecode) == BE32(d.m_gamecode)) && - (!memcmp(CurrentDir->m_dir_entries[i].m_filename, d.m_filename, 32))) + CurrentDir->m_dir_entries[i].m_filename == d.m_filename) { break; } @@ -428,7 +428,9 @@ std::string GCMemcard::DEntry_FileName(u8 index) const if (!m_valid || index >= DIRLEN) return ""; - return std::string((const char*)CurrentDir->m_dir_entries[index].m_filename, DENTRY_STRLEN); + return std::string( + reinterpret_cast(CurrentDir->m_dir_entries[index].m_filename.data()), + CurrentDir->m_dir_entries[index].m_filename.size()); } u32 GCMemcard::DEntry_ModTime(u8 index) const @@ -1317,7 +1319,7 @@ s32 GCMemcard::FZEROGX_MakeSaveGameValid(const Header& cardheader, const DEntry& int block = 0; // check for F-Zero GX system file - if (strcmp(reinterpret_cast(direntry.m_filename), "f_zero.dat") != 0) + if (strcmp(reinterpret_cast(direntry.m_filename.data()), "f_zero.dat") != 0) return 0; // get encrypted destination memory card serial numbers @@ -1371,10 +1373,10 @@ s32 GCMemcard::PSO_MakeSaveGameValid(const Header& cardheader, const DEntry& dir u32 pso3offset = 0x00; // check for PSO1&2 system file - if (strcmp(reinterpret_cast(direntry.m_filename), "PSO_SYSTEM") != 0) + if (strcmp(reinterpret_cast(direntry.m_filename.data()), "PSO_SYSTEM") != 0) { // check for PSO3 system file - if (strcmp(reinterpret_cast(direntry.m_filename), "PSO3_SYSTEM") == 0) + if (strcmp(reinterpret_cast(direntry.m_filename.data()), "PSO3_SYSTEM") == 0) { // PSO3 data block size adjustment pso3offset = 0x10; diff --git a/Source/Core/Core/HW/GCMemcard/GCMemcard.h b/Source/Core/Core/HW/GCMemcard/GCMemcard.h index fc26fc9499..749ba211f3 100644 --- a/Source/Core/Core/HW/GCMemcard/GCMemcard.h +++ b/Source/Core/Core/HW/GCMemcard/GCMemcard.h @@ -168,7 +168,8 @@ struct DEntry std::string GCI_FileName() const { std::string filename = std::string((char*)m_makercode, 2) + '-' + - std::string((char*)m_gamecode, 4) + '-' + (char*)m_filename + ".gci"; + std::string((char*)m_gamecode, 4) + '-' + + reinterpret_cast(m_filename.data()) + ".gci"; return Common::EscapeFileName(filename); } @@ -186,7 +187,7 @@ struct DEntry // 10 RGB5A3 banner // 11 ? maybe ==00? Time Splitters 2 and 3 have it and don't have banner // - u8 m_filename[DENTRY_STRLEN]; // 0x08 0x20 Filename + std::array m_filename; // 0x08 0x20 Filename Common::BigEndianValue m_modification_time; // 0x28 0x04 Time of file's last modification in seconds since // 12am, January 1st, 2000 @@ -296,9 +297,11 @@ public: bool LoadSaveBlocks(); bool HasCopyProtection() const { - if ((strcmp((char*)m_gci_header.m_filename, "PSO_SYSTEM") == 0) || - (strcmp((char*)m_gci_header.m_filename, "PSO3_SYSTEM") == 0) || - (strcmp((char*)m_gci_header.m_filename, "f_zero.dat") == 0)) + if ((strcmp(reinterpret_cast(m_gci_header.m_filename.data()), "PSO_SYSTEM") == + 0) || + (strcmp(reinterpret_cast(m_gci_header.m_filename.data()), "PSO3_SYSTEM") == + 0) || + (strcmp(reinterpret_cast(m_gci_header.m_filename.data()), "f_zero.dat") == 0)) return true; return false; }