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.
This commit is contained in:
parent
09b0564c75
commit
96f0e32f83
7 changed files with 40 additions and 18 deletions
|
@ -21,6 +21,7 @@ enum class ErrorDescription : u32 {
|
|||
WrongAddress = 53,
|
||||
FS_NotFound = 120,
|
||||
FS_AlreadyExists = 190,
|
||||
FS_InvalidOpenFlags = 230,
|
||||
FS_NotAFile = 250,
|
||||
FS_NotFormatted = 340, ///< This is used by the FS service when creating a SaveData archive
|
||||
InvalidSection = 1000,
|
||||
|
|
|
@ -103,7 +103,14 @@ ResultVal<bool> File::SyncRequest() {
|
|||
u32 address = cmd_buff[5];
|
||||
LOG_TRACE(Service_FS, "Read %s %s: offset=0x%llx length=%d address=0x%x",
|
||||
GetTypeName().c_str(), GetName().c_str(), offset, length, address);
|
||||
cmd_buff[2] = static_cast<u32>(backend->Read(offset, length, Memory::GetPointer(address)));
|
||||
if (offset + length > backend->GetSize())
|
||||
LOG_ERROR(Service_FS, "Reading from out of bounds offset=0x%llX length=0x%08X file_size=0x%llX", offset, length, backend->GetSize());
|
||||
ResultVal<size_t> read = backend->Read(offset, length, Memory::GetPointer(address));
|
||||
if (read.Failed()) {
|
||||
cmd_buff[1] = read.Code().raw;
|
||||
return read.Code();
|
||||
}
|
||||
cmd_buff[2] = static_cast<u32>(read.MoveFrom());
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -116,7 +123,13 @@ ResultVal<bool> File::SyncRequest() {
|
|||
u32 address = cmd_buff[6];
|
||||
LOG_TRACE(Service_FS, "Write %s %s: offset=0x%llx length=%d address=0x%x, flush=0x%x",
|
||||
GetTypeName().c_str(), GetName().c_str(), offset, length, address, flush);
|
||||
cmd_buff[2] = static_cast<u32>(backend->Write(offset, length, flush != 0, Memory::GetPointer(address)));
|
||||
|
||||
ResultVal<size_t> written = backend->Write(offset, length, flush != 0, Memory::GetPointer(address));
|
||||
if (written.Failed()) {
|
||||
cmd_buff[1] = written.Code().raw;
|
||||
return written.Code();
|
||||
}
|
||||
cmd_buff[2] = static_cast<u32>(written.MoveFrom());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue