summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLéo Lam <leo@innovatetechnologi.es>2017-02-10 21:04:52 +0100
committerLéo Lam <leo@innovatetechnologi.es>2017-02-10 21:06:23 +0100
commitf96d71ce81fece7bc2cc281e86633d92044b57cd (patch)
tree4448fcd29332c770ef5f98a2c70351478b62d266 /Source/Core
parentca4d2969a0b257293a2a6e7201afe4a9f7240c98 (diff)
FileIO: Simplify Seek()
We can return early from invalid conditions, which allows getting rid of quite a few levels of indentation. And let's not duplicate the new_position > file_size check.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/IOS/FS/FileIO.cpp74
1 files changed, 25 insertions, 49 deletions
diff --git a/Source/Core/Core/IOS/FS/FileIO.cpp b/Source/Core/Core/IOS/FS/FileIO.cpp
index 95ad4b3655..a277431e5a 100644
--- a/Source/Core/Core/IOS/FS/FileIO.cpp
+++ b/Source/Core/Core/IOS/FS/FileIO.cpp
@@ -158,61 +158,37 @@ void FileIO::OpenFile()
IPCCommandResult FileIO::Seek(const SeekRequest& request)
{
- u32 return_value = FS_EINVAL;
+ if (!m_file->IsOpen())
+ return GetDefaultReply(FS_ENOENT);
- if (m_file->IsOpen())
- {
- const u32 file_size = static_cast<u32>(m_file->GetSize());
- DEBUG_LOG(IOS_FILEIO, "FileIO: Seek Pos: 0x%08x, Mode: %i (%s, Length=0x%08x)", request.offset,
- request.mode, m_name.c_str(), file_size);
+ const u32 file_size = static_cast<u32>(m_file->GetSize());
+ DEBUG_LOG(IOS_FILEIO, "FileIO: Seek Pos: 0x%08x, Mode: %i (%s, Length=0x%08x)", request.offset,
+ request.mode, m_name.c_str(), file_size);
- switch (request.mode)
- {
- case SeekRequest::IOS_SEEK_SET:
- {
- if (request.offset <= file_size)
- {
- m_SeekPos = request.offset;
- return_value = m_SeekPos;
- }
- break;
- }
+ u32 new_position = 0;
+ switch (request.mode)
+ {
+ case SeekRequest::IOS_SEEK_SET:
+ new_position = request.offset;
+ break;
- case SeekRequest::IOS_SEEK_CUR:
- {
- const u32 wanted_pos = request.offset + m_SeekPos;
- if (wanted_pos <= file_size)
- {
- m_SeekPos = wanted_pos;
- return_value = m_SeekPos;
- }
- break;
- }
+ case SeekRequest::IOS_SEEK_CUR:
+ new_position = m_SeekPos + request.offset;
+ break;
- case SeekRequest::IOS_SEEK_END:
- {
- const u32 wanted_pos = request.offset + file_size;
- if (wanted_pos <= file_size)
- {
- m_SeekPos = wanted_pos;
- return_value = m_SeekPos;
- }
- break;
- }
+ case SeekRequest::IOS_SEEK_END:
+ new_position = file_size + request.offset;
+ break;
- default:
- {
- PanicAlert("FileIO Unsupported seek mode %i", request.mode);
- return_value = FS_EINVAL;
- break;
- }
- }
- }
- else
- {
- return_value = FS_ENOENT;
+ default:
+ return GetDefaultReply(FS_EINVAL);
}
- return GetDefaultReply(return_value);
+
+ if (new_position > file_size)
+ return GetDefaultReply(FS_EINVAL);
+
+ m_SeekPos = new_position;
+ return GetDefaultReply(new_position);
}
IPCCommandResult FileIO::Read(const ReadWriteRequest& request)