diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2017-02-10 21:04:52 +0100 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2017-02-10 21:06:23 +0100 |
| commit | f96d71ce81fece7bc2cc281e86633d92044b57cd (patch) | |
| tree | 4448fcd29332c770ef5f98a2c70351478b62d266 /Source/Core | |
| parent | ca4d2969a0b257293a2a6e7201afe4a9f7240c98 (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.cpp | 74 |
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) |
