diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2017-08-16 04:43:03 +0200 |
|---|---|---|
| committer | Pierre Bourdon <delroth@gmail.com> | 2017-08-22 23:13:14 +0200 |
| commit | dca70844a6429bbfa3249fcb17b5b68bba3fe3ab (patch) | |
| tree | 66d8c32b01cd1e51c2da1878acd8aeede1845b17 /Source/Core | |
| parent | ef3232cd746d3f9092aff22b3a8ee6a34f717805 (diff) | |
WFS: Implement CREATE_OPEN along with OPEN.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/IOS/WFS/WFSSRV.cpp | 18 | ||||
| -rw-r--r-- | Source/Core/Core/IOS/WFS/WFSSRV.h | 1 |
2 files changed, 15 insertions, 4 deletions
diff --git a/Source/Core/Core/IOS/WFS/WFSSRV.cpp b/Source/Core/Core/IOS/WFS/WFSSRV.cpp index 75bdddfabc..5ef6fe0965 100644 --- a/Source/Core/Core/IOS/WFS/WFSSRV.cpp +++ b/Source/Core/Core/IOS/WFS/WFSSRV.cpp @@ -184,9 +184,12 @@ IPCCommandResult WFSSRV::IOCtl(const IOCtlRequest& request) break; } + case IOCTL_WFS_CREATE_OPEN: case IOCTL_WFS_OPEN: { - u32 mode = Memory::Read_U32(request.buffer_in); + const char* ioctl_name = + request.request == IOCTL_WFS_OPEN ? "IOCTL_WFS_OPEN" : "IOCTL_WFS_CREATE_OPEN"; + u32 mode = request.request == IOCTL_WFS_OPEN ? Memory::Read_U32(request.buffer_in) : 2; u16 path_len = Memory::Read_U16(request.buffer_in + 0x20); std::string path = Memory::GetString(request.buffer_in + 0x22, path_len); @@ -201,14 +204,21 @@ IPCCommandResult WFSSRV::IOCtl(const IOCtlRequest& request) if (!fd_obj->Open()) { - ERROR_LOG(IOS_WFS, "IOCTL_WFS_OPEN(%s, %d): error opening file", path.c_str(), mode); + ERROR_LOG(IOS_WFS, "%s(%s, %d): error opening file", ioctl_name, path.c_str(), mode); ReleaseFileDescriptor(fd); return_error_code = WFS_ENOENT; break; } - INFO_LOG(IOS_WFS, "IOCTL_WFS_OPEN(%s, %d) -> %d", path.c_str(), mode, fd); - Memory::Write_U16(fd, request.buffer_out + 0x14); + INFO_LOG(IOS_WFS, "%s(%s, %d) -> %d", ioctl_name, path.c_str(), mode, fd); + if (request.request == IOCTL_WFS_OPEN) + { + Memory::Write_U16(fd, request.buffer_out + 0x14); + } + else + { + Memory::Write_U16(fd, request.buffer_out); + } break; } diff --git a/Source/Core/Core/IOS/WFS/WFSSRV.h b/Source/Core/Core/IOS/WFS/WFSSRV.h index d602ca0a36..bf7c58d170 100644 --- a/Source/Core/Core/IOS/WFS/WFSSRV.h +++ b/Source/Core/Core/IOS/WFS/WFSSRV.h @@ -60,6 +60,7 @@ private: IOCTL_WFS_GETCWD = 0x13, IOCTL_WFS_DELETE = 0x15, IOCTL_WFS_GET_ATTRIBUTES = 0x17, + IOCTL_WFS_CREATE_OPEN = 0x19, IOCTL_WFS_OPEN = 0x1A, IOCTL_WFS_GET_SIZE = 0x1B, IOCTL_WFS_CLOSE = 0x1E, |
