recording: Use wxFopen instead of f_open

This commit is contained in:
Tyler Wilding 2018-11-19 22:08:19 -05:00 committed by lightningterror
parent 6b3fb14339
commit d7074503d8
3 changed files with 62 additions and 70 deletions

View File

@ -29,20 +29,10 @@ long InputRecordingFile::_getBlockSeekPoint(const long & frame)
} }
} }
// Temporary Shim, probably a better cross-platform way to correct usages of fopen_s
int fopen_s(FILE **f, const char *name, const char *mode) {
int ret = 0;
assert(f);
*f = fopen(name, mode);
if (!*f)
ret = errno;
return ret;
}
//---------------------------------- //----------------------------------
// file // file
//---------------------------------- //----------------------------------
bool InputRecordingFile::Open(const wxString fn, bool fNewOpen, VmStateBuffer *ss) bool InputRecordingFile::Open(const wxString path, bool fNewOpen, VmStateBuffer *ss)
{ {
Close(); Close();
wxString mode = L"rb+"; wxString mode = L"rb+";
@ -52,12 +42,13 @@ bool InputRecordingFile::Open(const wxString fn, bool fNewOpen, VmStateBuffer *s
UndoCount = 0; UndoCount = 0;
header.init(); header.init();
} }
if ( fopen_s(&fp, fn.ToAscii(), mode.c_str()) != 0) recordingFile = wxFopen(path, mode);
if ( recordingFile == NULL )
{ {
recordingConLog(wxString::Format("[REC]: Movie file opening failed. Error - %s\n", strerror(errno))); recordingConLog(wxString::Format("[REC]: Movie file opening failed. Error - %s\n", strerror(errno)));
return false; return false;
} }
filename = fn; filename = path;
if (fNewOpen) { if (fNewOpen) {
if (ss) { if (ss) {
@ -76,11 +67,11 @@ bool InputRecordingFile::Open(const wxString fn, bool fNewOpen, VmStateBuffer *s
} }
bool InputRecordingFile::Close() bool InputRecordingFile::Close()
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
writeHeader(); writeHeader();
writeSavestate(); writeSavestate();
fclose(fp); fclose(recordingFile);
fp = NULL; recordingFile = NULL;
filename = ""; filename = "";
return true; return true;
} }
@ -90,16 +81,16 @@ bool InputRecordingFile::Close()
//---------------------------------- //----------------------------------
bool InputRecordingFile::writeKeyBuf(const uint & frame, const uint port, const uint bufIndex, const u8 & buf) bool InputRecordingFile::writeKeyBuf(const uint & frame, const uint port, const uint bufIndex, const u8 & buf)
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE + 18 * port + bufIndex; long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE + 18 * port + bufIndex;
if (fseek(fp, seek, SEEK_SET) != 0){ if (fseek(recordingFile, seek, SEEK_SET) != 0){
return false; return false;
} }
if (fwrite(&buf, 1, 1, fp) != 1) { if (fwrite(&buf, 1, 1, recordingFile) != 1) {
return false; return false;
} }
fflush(fp); fflush(recordingFile);
return true; return true;
} }
@ -108,13 +99,13 @@ bool InputRecordingFile::writeKeyBuf(const uint & frame, const uint port, const
//---------------------------------- //----------------------------------
bool InputRecordingFile::readKeyBuf(u8 & result,const uint & frame, const uint port, const uint bufIndex) bool InputRecordingFile::readKeyBuf(u8 & result,const uint & frame, const uint port, const uint bufIndex)
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE + 18 * port + bufIndex; long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE + 18 * port + bufIndex;
if (fseek(fp, seek, SEEK_SET) != 0) { if (fseek(recordingFile, seek, SEEK_SET) != 0) {
return false; return false;
} }
if (fread(&result, 1, 1, fp) != 1) { if (fread(&result, 1, 1, recordingFile) != 1) {
return false; return false;
} }
return true; return true;
@ -129,15 +120,15 @@ bool InputRecordingFile::readKeyBuf(u8 & result,const uint & frame, const uint p
void InputRecordingFile::getPadData(PadData & result, unsigned long frame) void InputRecordingFile::getPadData(PadData & result, unsigned long frame)
{ {
result.fExistKey = false; result.fExistKey = false;
if (fp == NULL)return; if (recordingFile == NULL)return;
long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE; long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE;
if (fseek(fp, seek, SEEK_SET) != 0)return; if (fseek(recordingFile, seek, SEEK_SET) != 0)return;
if (fread(result.buf, 1, BLOCK_DATA_SIZE, fp) == 0)return; if (fread(result.buf, 1, BLOCK_DATA_SIZE, recordingFile) == 0)return;
result.fExistKey = true; result.fExistKey = true;
} }
bool InputRecordingFile::DeletePadData(unsigned long frame) bool InputRecordingFile::DeletePadData(unsigned long frame)
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
for (unsigned long i = frame; i < MaxFrame - 1; i++) for (unsigned long i = frame; i < MaxFrame - 1; i++)
{ {
@ -145,20 +136,20 @@ bool InputRecordingFile::DeletePadData(unsigned long frame)
long seek2 = _getBlockSeekPoint(i) + BLOCK_HEADER_SIZE; long seek2 = _getBlockSeekPoint(i) + BLOCK_HEADER_SIZE;
u8 buf[2][18]; u8 buf[2][18];
fseek(fp, seek1, SEEK_SET); fseek(recordingFile, seek1, SEEK_SET);
fread(buf, 1, BLOCK_DATA_SIZE, fp); fread(buf, 1, BLOCK_DATA_SIZE, recordingFile);
fseek(fp, seek2, SEEK_SET); fseek(recordingFile, seek2, SEEK_SET);
fwrite(buf,1, BLOCK_DATA_SIZE, fp); fwrite(buf,1, BLOCK_DATA_SIZE, recordingFile);
} }
MaxFrame--; MaxFrame--;
writeMaxFrame(); writeMaxFrame();
fflush(fp); fflush(recordingFile);
return true; return true;
} }
bool InputRecordingFile::InsertPadData(unsigned long frame, const PadData& key) bool InputRecordingFile::InsertPadData(unsigned long frame, const PadData& key)
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
if (!key.fExistKey)return false; if (!key.fExistKey)return false;
for (unsigned long i = MaxFrame - 1; i >= frame; i--) for (unsigned long i = MaxFrame - 1; i >= frame; i--)
@ -167,32 +158,32 @@ bool InputRecordingFile::InsertPadData(unsigned long frame, const PadData& key)
long seek2 = _getBlockSeekPoint(i+1) + BLOCK_HEADER_SIZE; long seek2 = _getBlockSeekPoint(i+1) + BLOCK_HEADER_SIZE;
u8 buf[2][18]; u8 buf[2][18];
fseek(fp, seek1, SEEK_SET); fseek(recordingFile, seek1, SEEK_SET);
fread(buf, 1, BLOCK_DATA_SIZE, fp); fread(buf, 1, BLOCK_DATA_SIZE, recordingFile);
fseek(fp, seek2, SEEK_SET); fseek(recordingFile, seek2, SEEK_SET);
fwrite(buf, 1, BLOCK_DATA_SIZE, fp); fwrite(buf, 1, BLOCK_DATA_SIZE, recordingFile);
} }
{ {
long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE; long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE;
fseek(fp, seek, SEEK_SET); fseek(recordingFile, seek, SEEK_SET);
fwrite(key.buf, 1, BLOCK_DATA_SIZE, fp); fwrite(key.buf, 1, BLOCK_DATA_SIZE, recordingFile);
} }
MaxFrame++; MaxFrame++;
writeMaxFrame(); writeMaxFrame();
fflush(fp); fflush(recordingFile);
return true; return true;
} }
bool InputRecordingFile::UpdatePadData(unsigned long frame, const PadData& key) bool InputRecordingFile::UpdatePadData(unsigned long frame, const PadData& key)
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
if (!key.fExistKey)return false; if (!key.fExistKey)return false;
long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE; long seek = _getBlockSeekPoint(frame) + BLOCK_HEADER_SIZE;
fseek(fp, seek, SEEK_SET); fseek(recordingFile, seek, SEEK_SET);
if (fwrite(key.buf, 1, BLOCK_DATA_SIZE, fp) == 0)return false; if (fwrite(key.buf, 1, BLOCK_DATA_SIZE, recordingFile) == 0)return false;
fflush(fp); fflush(recordingFile);
return true; return true;
} }
@ -204,15 +195,15 @@ bool InputRecordingFile::UpdatePadData(unsigned long frame, const PadData& key)
//=================================== //===================================
bool InputRecordingFile::readHeaderAndCheck() bool InputRecordingFile::readHeaderAndCheck()
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
rewind(fp); rewind(recordingFile);
if (fread(&header, sizeof(InputRecordingHeader), 1, fp) != 1)return false; if (fread(&header, sizeof(InputRecordingHeader), 1, recordingFile) != 1)return false;
if (fread(&MaxFrame, 4, 1, fp) != 1)return false; if (fread(&MaxFrame, 4, 1, recordingFile) != 1)return false;
if (fread(&UndoCount, 4, 1, fp) != 1)return false; if (fread(&UndoCount, 4, 1, recordingFile) != 1)return false;
if (fread(&savestate.fromSavestate, sizeof(bool), 1, fp) != 1) return false; if (fread(&savestate.fromSavestate, sizeof(bool), 1, recordingFile) != 1) return false;
if (savestate.fromSavestate) { if (savestate.fromSavestate) {
// We read the size (and the savestate) only if we must // We read the size (and the savestate) only if we must
if (fread(&savestate.savestatesize, sizeof(savestate.savestatesize), 1, fp) != 1) return false; if (fread(&savestate.savestatesize, sizeof(savestate.savestatesize), 1, recordingFile) != 1) return false;
if (savestate.savestatesize == 0) { if (savestate.savestatesize == 0) {
recordingConLog(L"[REC]: Invalid size of the savestate.\n"); recordingConLog(L"[REC]: Invalid size of the savestate.\n");
return false; return false;
@ -220,7 +211,7 @@ bool InputRecordingFile::readHeaderAndCheck()
savestate.savestate.MakeRoomFor(savestate.savestatesize); savestate.savestate.MakeRoomFor(savestate.savestatesize);
// We read "savestatesize" * the size of a cell // We read "savestatesize" * the size of a cell
if (fread(savestate.savestate.GetPtr(), sizeof(savestate.savestate[0]), savestate.savestatesize, fp) if (fread(savestate.savestate.GetPtr(), sizeof(savestate.savestate[0]), savestate.savestatesize, recordingFile)
!= savestate.savestatesize) return false; != savestate.savestatesize) return false;
// We load the savestate // We load the savestate
@ -247,29 +238,29 @@ bool InputRecordingFile::readHeaderAndCheck()
} }
bool InputRecordingFile::writeHeader() bool InputRecordingFile::writeHeader()
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
rewind(fp); rewind(recordingFile);
if (fwrite(&header, sizeof(InputRecordingHeader), 1, fp) != 1) return false; if (fwrite(&header, sizeof(InputRecordingHeader), 1, recordingFile) != 1) return false;
return true; return true;
} }
bool InputRecordingFile::writeSavestate() bool InputRecordingFile::writeSavestate()
{ {
if (fp == NULL) return false; if (recordingFile == NULL) return false;
fseek(fp, SEEKPOINT_SAVESTATE, SEEK_SET); fseek(recordingFile, SEEKPOINT_SAVESTATE, SEEK_SET);
if (fwrite(&savestate.fromSavestate, sizeof(bool), 1, fp) != 1) return false; if (fwrite(&savestate.fromSavestate, sizeof(bool), 1, recordingFile) != 1) return false;
if (savestate.fromSavestate) { if (savestate.fromSavestate) {
if (fwrite(&savestate.savestatesize, sizeof(savestate.savestatesize), 1, fp) != 1) return false; if (fwrite(&savestate.savestatesize, sizeof(savestate.savestatesize), 1, recordingFile) != 1) return false;
if (fwrite(savestate.savestate.GetPtr(), sizeof(savestate.savestate[0]), savestate.savestatesize, fp) if (fwrite(savestate.savestate.GetPtr(), sizeof(savestate.savestate[0]), savestate.savestatesize, recordingFile)
!= savestate.savestatesize) return false; != savestate.savestatesize) return false;
} }
return true; return true;
} }
bool InputRecordingFile::writeMaxFrame() bool InputRecordingFile::writeMaxFrame()
{ {
if (fp == NULL)return false; if (recordingFile == NULL)return false;
fseek(fp, SEEKPOINT_FRAMEMAX, SEEK_SET); fseek(recordingFile, SEEKPOINT_FRAMEMAX, SEEK_SET);
if (fwrite(&MaxFrame, 4, 1, fp) != 1) return false; if (fwrite(&MaxFrame, 4, 1, recordingFile) != 1) return false;
return true; return true;
} }
void InputRecordingFile::updateFrameMax(unsigned long frame) void InputRecordingFile::updateFrameMax(unsigned long frame)
@ -278,16 +269,16 @@ void InputRecordingFile::updateFrameMax(unsigned long frame)
return; return;
} }
MaxFrame = frame; MaxFrame = frame;
if (fp == NULL)return ; if (recordingFile == NULL)return ;
fseek(fp, SEEKPOINT_FRAMEMAX, SEEK_SET); fseek(recordingFile, SEEKPOINT_FRAMEMAX, SEEK_SET);
fwrite(&MaxFrame, 4, 1, fp); fwrite(&MaxFrame, 4, 1, recordingFile);
} }
void InputRecordingFile::addUndoCount() void InputRecordingFile::addUndoCount()
{ {
UndoCount++; UndoCount++;
if (fp == NULL)return; if (recordingFile == NULL)return;
fseek(fp, SEEKPOINT_UNDOCOUNT, SEEK_SET); fseek(recordingFile, SEEKPOINT_UNDOCOUNT, SEEK_SET);
fwrite(&UndoCount, 4, 1, fp); fwrite(&UndoCount, 4, 1, recordingFile);
} }

View File

@ -53,7 +53,7 @@ public:
bool UpdatePadData(unsigned long frame, const PadData& key); bool UpdatePadData(unsigned long frame, const PadData& key);
private: private:
FILE * fp=NULL; FILE * recordingFile = NULL;
wxString filename = ""; wxString filename = "";
private: private:

View File

@ -79,6 +79,7 @@ void Pcsx2App::OpenMainFrame()
#ifndef DISABLE_RECORDING #ifndef DISABLE_RECORDING
VirtualPad* virtualPad0 = new VirtualPad(mainFrame, wxID_ANY, wxEmptyString, 0); VirtualPad* virtualPad0 = new VirtualPad(mainFrame, wxID_ANY, wxEmptyString, 0);
m_id_VirtualPad[0] = virtualPad0->GetId(); m_id_VirtualPad[0] = virtualPad0->GetId();
VirtualPad *virtualPad1 = new VirtualPad(mainFrame, wxID_ANY, wxEmptyString, 1); VirtualPad *virtualPad1 = new VirtualPad(mainFrame, wxID_ANY, wxEmptyString, 1);
m_id_VirtualPad[1] = virtualPad1->GetId(); m_id_VirtualPad[1] = virtualPad1->GetId();