summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2017-08-16 04:43:03 +0200
committerPierre Bourdon <delroth@gmail.com>2017-08-22 23:13:14 +0200
commitdca70844a6429bbfa3249fcb17b5b68bba3fe3ab (patch)
tree66d8c32b01cd1e51c2da1878acd8aeede1845b17 /Source/Core
parentef3232cd746d3f9092aff22b3a8ee6a34f717805 (diff)
WFS: Implement CREATE_OPEN along with OPEN.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/IOS/WFS/WFSSRV.cpp18
-rw-r--r--Source/Core/Core/IOS/WFS/WFSSRV.h1
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,