summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2017-02-22 22:43:40 +0100
committerGitHub <noreply@github.com>2017-02-22 22:43:40 +0100
commit9b0ce3190607ae28e2f2d45bec1a3a604904fdc9 (patch)
treef74e6c256a5e7d8baaee3f98bb4405b91918c90b /Source/Core
parentfa9b89fdf9718de9c6c82ded9f67feeefaa3775f (diff)
parentb0a132875a6c7b7104182ebcaf706d8d71a40a2a (diff)
Merge pull request #4948 from leoetlino/file
IOS/FFSP: Fix the "past EOF" check
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/IOS/FS/FileIO.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/Source/Core/Core/IOS/FS/FileIO.cpp b/Source/Core/Core/IOS/FS/FileIO.cpp
index 7ab778747b..dbc2f02014 100644
--- a/Source/Core/Core/IOS/FS/FileIO.cpp
+++ b/Source/Core/Core/IOS/FS/FileIO.cpp
@@ -209,9 +209,10 @@ IPCCommandResult FileIO::Read(const ReadWriteRequest& request)
}
u32 requested_read_length = request.size;
+ const u32 file_size = static_cast<u32>(m_file->GetSize());
// IOS has this check in the read request handler.
- if (requested_read_length + m_SeekPos > static_cast<u32>(m_file->GetSize()))
- requested_read_length -= m_SeekPos;
+ if (requested_read_length + m_SeekPos > file_size)
+ requested_read_length = file_size - m_SeekPos;
DEBUG_LOG(IOS_FILEIO, "Read 0x%x bytes to 0x%08x from %s", request.size, request.buffer,
m_name.c_str());
@@ -219,7 +220,7 @@ IPCCommandResult FileIO::Read(const ReadWriteRequest& request)
const u32 number_of_bytes_read = static_cast<u32>(
fread(Memory::GetPointer(request.buffer), 1, requested_read_length, m_file->GetHandle()));
- if (number_of_bytes_read != request.size && ferror(m_file->GetHandle()))
+ if (number_of_bytes_read != requested_read_length && ferror(m_file->GetHandle()))
return GetDefaultReply(FS_EACCESS);
// IOS returns the number of bytes read and adds that value to the seek position,