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.
This commit is contained in:
Admiral H. Curtiss 2015-08-09 13:02:11 +02:00
parent 0e783f0003
commit 30eb292b48
2 changed files with 9 additions and 11 deletions

View File

@ -687,7 +687,7 @@ bool FolderMemoryCard::ReadFromFile( u8 *dest, u32 adr, u32 dataLength ) {
auto it = m_fileMetadataQuickAccess.find( fatCluster ); auto it = m_fileMetadataQuickAccess.find( fatCluster );
if ( it != m_fileMetadataQuickAccess.end() ) { if ( it != m_fileMetadataQuickAccess.end() ) {
const u32 clusterNumber = it->second.consecutiveCluster; 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() ) { if ( file->IsOpened() ) {
const u32 clusterOffset = ( page % 2 ) * PageSize + offset; const u32 clusterOffset = ( page % 2 ) * PageSize + offset;
const u32 fileOffset = clusterNumber * ClusterSize + clusterOffset; 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; const u32 clusterNumber = it->second.consecutiveCluster;
if ( m_performFileWrites ) { 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() ) { if ( file->IsOpened() ) {
const u32 clusterOffset = ( page % 2 ) * PageSize + offset; const u32 clusterOffset = ( page % 2 ) * PageSize + offset;
const u32 fileSize = entry->entry.data.length; const u32 fileSize = entry->entry.data.length;
@ -1316,7 +1316,7 @@ FileAccessHelper::~FileAccessHelper() {
this->Close(); 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(); this->Close();
wxFileName fn( folderName ); wxFileName fn( folderName );
@ -1331,9 +1331,8 @@ wxFFile* FileAccessHelper::Open( const wxFileName& folderName, MemoryCardFileMet
createEmptyFile.Close(); createEmptyFile.Close();
} }
m_file = new wxFFile( filename, mode ); m_file = new wxFFile( filename, L"r+b" );
m_entry = fileRef->entry; m_entry = fileRef->entry;
m_mode = mode;
if ( writeMetadata ) { if ( writeMetadata ) {
const MemoryCardFileEntry* const entry = fileRef->entry; const MemoryCardFileEntry* const entry = fileRef->entry;
@ -1366,11 +1365,11 @@ wxFFile* FileAccessHelper::Open( const wxFileName& folderName, MemoryCardFileMet
return m_file; return m_file;
} }
wxFFile* FileAccessHelper::ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, const wxString& mode, bool writeMetadata ) { wxFFile* FileAccessHelper::ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata ) {
if ( m_file && fileRef->entry == m_entry && mode == m_mode ) { if ( m_file && fileRef->entry == m_entry ) {
return m_file; return m_file;
} else { } else {
return this->Open( folderName, fileRef, mode, writeMetadata ); return this->Open( folderName, fileRef, writeMetadata );
} }
} }

View File

@ -189,14 +189,13 @@ class FileAccessHelper {
protected: protected:
wxFFile* m_file; wxFFile* m_file;
const MemoryCardFileEntry* m_entry; const MemoryCardFileEntry* m_entry;
wxString m_mode;
public: public:
FileAccessHelper(); FileAccessHelper();
~FileAccessHelper(); ~FileAccessHelper();
// Get an already opened file if possible, or open a new one and remember it // 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 // Close an open file, if any
void Close(); void Close();
@ -206,7 +205,7 @@ public:
protected: protected:
// Open a new file and remember it for later // 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 );
}; };
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------