From 30eb292b48c59c8c89751b3627562ef94d0c41cf Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Sun, 9 Aug 2015 13:02:11 +0200 Subject: [PATCH] FolderMemoryCard: Remove the Mode parameter for opening files, just always open in r+b so we can both read and write with the same handle. This breaks metadata writes when a file is read before it's written. --- pcsx2/gui/MemoryCardFolder.cpp | 15 +++++++-------- pcsx2/gui/MemoryCardFolder.h | 5 ++--- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/pcsx2/gui/MemoryCardFolder.cpp b/pcsx2/gui/MemoryCardFolder.cpp index 5b2c245ba9..e7ccd6d090 100644 --- a/pcsx2/gui/MemoryCardFolder.cpp +++ b/pcsx2/gui/MemoryCardFolder.cpp @@ -687,7 +687,7 @@ bool FolderMemoryCard::ReadFromFile( u8 *dest, u32 adr, u32 dataLength ) { auto it = m_fileMetadataQuickAccess.find( fatCluster ); if ( it != m_fileMetadataQuickAccess.end() ) { const u32 clusterNumber = it->second.consecutiveCluster; - wxFFile* file = m_lastAccessedFile.ReOpen( m_folderName, &it->second, L"rb" ); + wxFFile* file = m_lastAccessedFile.ReOpen( m_folderName, &it->second ); if ( file->IsOpened() ) { const u32 clusterOffset = ( page % 2 ) * PageSize + offset; const u32 fileOffset = clusterNumber * ClusterSize + clusterOffset; @@ -1111,7 +1111,7 @@ bool FolderMemoryCard::WriteToFile( const u8* src, u32 adr, u32 dataLength ) { const u32 clusterNumber = it->second.consecutiveCluster; if ( m_performFileWrites ) { - wxFFile* file = m_lastAccessedFile.ReOpen( m_folderName, &it->second, L"r+b", true ); + wxFFile* file = m_lastAccessedFile.ReOpen( m_folderName, &it->second, true ); if ( file->IsOpened() ) { const u32 clusterOffset = ( page % 2 ) * PageSize + offset; const u32 fileSize = entry->entry.data.length; @@ -1316,7 +1316,7 @@ FileAccessHelper::~FileAccessHelper() { this->Close(); } -wxFFile* FileAccessHelper::Open( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, const wxString& mode, bool writeMetadata ) { +wxFFile* FileAccessHelper::Open( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata ) { this->Close(); wxFileName fn( folderName ); @@ -1331,9 +1331,8 @@ wxFFile* FileAccessHelper::Open( const wxFileName& folderName, MemoryCardFileMet createEmptyFile.Close(); } - m_file = new wxFFile( filename, mode ); + m_file = new wxFFile( filename, L"r+b" ); m_entry = fileRef->entry; - m_mode = mode; if ( writeMetadata ) { const MemoryCardFileEntry* const entry = fileRef->entry; @@ -1366,11 +1365,11 @@ wxFFile* FileAccessHelper::Open( const wxFileName& folderName, MemoryCardFileMet return m_file; } -wxFFile* FileAccessHelper::ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, const wxString& mode, bool writeMetadata ) { - if ( m_file && fileRef->entry == m_entry && mode == m_mode ) { +wxFFile* FileAccessHelper::ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata ) { + if ( m_file && fileRef->entry == m_entry ) { return m_file; } else { - return this->Open( folderName, fileRef, mode, writeMetadata ); + return this->Open( folderName, fileRef, writeMetadata ); } } diff --git a/pcsx2/gui/MemoryCardFolder.h b/pcsx2/gui/MemoryCardFolder.h index 421f088dfe..ef32ea2a5d 100644 --- a/pcsx2/gui/MemoryCardFolder.h +++ b/pcsx2/gui/MemoryCardFolder.h @@ -189,14 +189,13 @@ class FileAccessHelper { protected: wxFFile* m_file; const MemoryCardFileEntry* m_entry; - wxString m_mode; public: FileAccessHelper(); ~FileAccessHelper(); // Get an already opened file if possible, or open a new one and remember it - wxFFile* ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, const wxString& mode, bool writeMetadata = false ); + wxFFile* ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata = false ); // Close an open file, if any void Close(); @@ -206,7 +205,7 @@ public: protected: // Open a new file and remember it for later - wxFFile* Open( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, const wxString& mode, bool writeMetadata = false ); + wxFFile* Open( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata = false ); }; // --------------------------------------------------------------------------------------