diff --git a/Core/FileSystems/DirectoryFileSystem.cpp b/Core/FileSystems/DirectoryFileSystem.cpp index 7beb2c5738..dc1f6a1ac2 100644 --- a/Core/FileSystems/DirectoryFileSystem.cpp +++ b/Core/FileSystems/DirectoryFileSystem.cpp @@ -324,7 +324,7 @@ size_t DirectoryFileHandle::Read(u8* pointer, s64 size) // On a PSP. it actually is truncated, but the data wasn't erased. off_t off = (off_t)Seek(0, FILEMOVE_CURRENT); if (needsTrunc_ <= off) { - return ReplayApplyDiskRead(pointer, 0, (uint32_t)size, CoreTiming::GetGlobalTimeUs()); + return replay_ ? ReplayApplyDiskRead(pointer, 0, (uint32_t)size, CoreTiming::GetGlobalTimeUs()) : 0; } if (needsTrunc_ < off + size) { size = needsTrunc_ - off; @@ -335,7 +335,7 @@ size_t DirectoryFileHandle::Read(u8* pointer, s64 size) #else bytesRead = read(hFile, pointer, size); #endif - return ReplayApplyDiskRead(pointer, (uint32_t)bytesRead, (uint32_t)size, CoreTiming::GetGlobalTimeUs()); + return replay_ ? ReplayApplyDiskRead(pointer, (uint32_t)bytesRead, (uint32_t)size, CoreTiming::GetGlobalTimeUs()) : bytesRead; } size_t DirectoryFileHandle::Write(const u8* pointer, s64 size) @@ -412,7 +412,7 @@ size_t DirectoryFileHandle::Seek(s32 position, FileMove type) result = lseek(hFile, position, moveMethod); #endif - return (size_t)ReplayApplyDisk64(ReplayAction::FILE_SEEK, result, CoreTiming::GetGlobalTimeUs()); + return replay_ ? (size_t)ReplayApplyDisk64(ReplayAction::FILE_SEEK, result, CoreTiming::GetGlobalTimeUs()) : result; } void DirectoryFileHandle::Close() diff --git a/Core/FileSystems/DirectoryFileSystem.h b/Core/FileSystems/DirectoryFileSystem.h index 67b0acb0c0..7301679964 100644 --- a/Core/FileSystems/DirectoryFileSystem.h +++ b/Core/FileSystems/DirectoryFileSystem.h @@ -57,23 +57,21 @@ enum FixPathCaseBehavior { bool FixPathCase(std::string& basePath, std::string &path, FixPathCaseBehavior behavior); #endif -struct DirectoryFileHandle -{ -#ifdef _WIN32 - HANDLE hFile; -#else - int hFile; -#endif - s64 needsTrunc_; +struct DirectoryFileHandle { + enum Flags { + NORMAL, + SKIP_REPLAY, + }; - DirectoryFileHandle() - { #ifdef _WIN32 - hFile = (HANDLE)-1; + HANDLE hFile = (HANDLE)-1; #else - hFile = -1; + int hFile = -1; #endif - needsTrunc_ = -1; + s64 needsTrunc_ = -1; + bool replay_ = true; + + DirectoryFileHandle(Flags flags) : replay_(flags != SKIP_REPLAY) { } std::string GetLocalPath(std::string& basePath, std::string localpath); @@ -115,7 +113,7 @@ public: private: struct OpenFileEntry { - DirectoryFileHandle hFile; + DirectoryFileHandle hFile = DirectoryFileHandle::NORMAL; std::string guestFilename; FileAccess access; }; diff --git a/Core/FileSystems/VirtualDiscFileSystem.h b/Core/FileSystems/VirtualDiscFileSystem.h index 39f9e598e9..e3699268ac 100644 --- a/Core/FileSystems/VirtualDiscFileSystem.h +++ b/Core/FileSystems/VirtualDiscFileSystem.h @@ -127,7 +127,7 @@ private: typedef enum { VFILETYPE_NORMAL, VFILETYPE_LBN, VFILETYPE_ISO } VirtualFileType; struct OpenFileEntry { - DirectoryFileHandle hFile; + DirectoryFileHandle hFile = DirectoryFileHandle::SKIP_REPLAY; HandlerFileHandle handler; VirtualFileType type; u32 fileIndex;