Allow to share writing to the ISO through an ini option

This commit is contained in:
Kingcom 2014-08-15 22:48:12 +02:00
parent 7e5b6dee9c
commit f5fe75a73b
6 changed files with 31 additions and 20 deletions

View File

@ -75,8 +75,10 @@ class FlatFileReader : public AsyncFileReader
io_context_t m_aio_context;
#endif
bool shareWrite;
public:
FlatFileReader(void);
FlatFileReader(bool shareWrite = false);
virtual ~FlatFileReader(void);
virtual bool Open(const wxString& fileName);

View File

@ -201,7 +201,10 @@ bool InputIsoFile::Open( const wxString& srcfile, bool testOnly )
Close();
m_filename = srcfile;
m_reader = new FlatFileReader();
// Allow write sharing of the iso based on the ini settings.
// Mostly useful for romhacking, where the disc is frequently
// changed and the emulator would block modifications
m_reader = new FlatFileReader(EmuConfig.CdvdShareWrite);
m_reader->Open(m_filename);
bool isBlockdump, isCompressed = false;

View File

@ -433,6 +433,7 @@ struct Pcsx2Config
bool
CdvdVerboseReads :1, // enables cdvd read activity verbosely dumped to the console
CdvdDumpBlocks :1, // enables cdvd block dumping
CdvdShareWrite :1, // allows the iso to be modified while it's loaded
EnablePatches :1, // enables patch detection and application
EnableCheats :1, // enables cheat detection and application
EnableWideScreenPatches :1,

View File

@ -16,7 +16,7 @@
#include "PrecompiledHeader.h"
#include "AsyncFileReader.h"
FlatFileReader::FlatFileReader(void)
FlatFileReader::FlatFileReader(bool shareWrite) : shareWrite(shareWrite)
{
m_blocksize = 2048;
m_fd = 0;

View File

@ -410,6 +410,7 @@ void Pcsx2Config::LoadSave( IniInterface& ini )
IniBitBool( CdvdVerboseReads );
IniBitBool( CdvdDumpBlocks );
IniBitBool( CdvdShareWrite );
IniBitBool( EnablePatches );
IniBitBool( EnableCheats );
IniBitBool( EnableWideScreenPatches );

View File

@ -16,7 +16,7 @@
#include "PrecompiledHeader.h"
#include "AsyncFileReader.h"
FlatFileReader::FlatFileReader(void)
FlatFileReader::FlatFileReader(bool shareWrite) : shareWrite(shareWrite)
{
m_blocksize = 2048;
hOverlappedFile = INVALID_HANDLE_VALUE;
@ -35,10 +35,14 @@ bool FlatFileReader::Open(const wxString& fileName)
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
DWORD shareMode = FILE_SHARE_READ;
if (shareWrite)
shareMode |= FILE_SHARE_WRITE;
hOverlappedFile = CreateFile(
fileName,
GENERIC_READ,
FILE_SHARE_READ,
shareMode,
NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_OVERLAPPED,