aboutsummaryrefslogtreecommitdiff
path: root/src/core/file_sys/disk_archive.cpp
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2015-12-28 10:03:09 -0500
committerSubv <subv2112@gmail.com>2016-03-20 14:28:17 -0500
commit96f0e32f836b19edb3d14ce4f87a7aed1ac6a8e1 (patch)
tree9eed35100efe7714f7ef5a39ff2c3bbf897f3dae /src/core/file_sys/disk_archive.cpp
parent09b0564c75c3da41eaf15dcb847831c11f4c27b9 (diff)
HLE/FS: Return the proper error codes on file Read/Write operations.
These operations are limited by the open flags specified while opening the file.
Diffstat (limited to 'src/core/file_sys/disk_archive.cpp')
-rw-r--r--src/core/file_sys/disk_archive.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/core/file_sys/disk_archive.cpp b/src/core/file_sys/disk_archive.cpp
index 0c55a4863..2dca895fd 100644
--- a/src/core/file_sys/disk_archive.cpp
+++ b/src/core/file_sys/disk_archive.cpp
@@ -124,17 +124,23 @@ bool DiskFile::Open() {
return file->IsOpen();
}
-size_t DiskFile::Read(const u64 offset, const size_t length, u8* buffer) const {
+ResultVal<size_t> DiskFile::Read(const u64 offset, const size_t length, u8* buffer) const {
+ if (!mode.read_flag && !mode.write_flag)
+ return ResultCode(ErrorDescription::FS_InvalidOpenFlags, ErrorModule::FS, ErrorSummary::Canceled, ErrorLevel::Status);
+
file->Seek(offset, SEEK_SET);
- return file->ReadBytes(buffer, length);
+ return MakeResult<size_t>(file->ReadBytes(buffer, length));
}
-size_t DiskFile::Write(const u64 offset, const size_t length, const bool flush, const u8* buffer) const {
+ResultVal<size_t> DiskFile::Write(const u64 offset, const size_t length, const bool flush, const u8* buffer) const {
+ if (!mode.write_flag)
+ return ResultCode(ErrorDescription::FS_InvalidOpenFlags, ErrorModule::FS, ErrorSummary::Canceled, ErrorLevel::Status);
+
file->Seek(offset, SEEK_SET);
size_t written = file->WriteBytes(buffer, length);
if (flush)
file->Flush();
- return written;
+ return MakeResult<size_t>(written);
}
u64 DiskFile::GetSize() const {