Module: wine Branch: master Commit: 048964b40e1518c985e907d99ec606b4dd619444 URL: http://source.winehq.org/git/wine.git/?a=commit;h=048964b40e1518c985e907d99e...
Author: Bruno Jesus 00cpxxx@gmail.com Date: Tue Sep 6 15:30:35 2016 -0300
ws2_32: Debug the ioctl code name whenever possible.
Signed-off-by: Bruno Jesus 00cpxxx@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ws2_32/socket.c | 68 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 9 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 79ccfc2..ccd50f8 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -4393,11 +4393,61 @@ char* WINAPI WS_inet_ntoa(struct WS_in_addr in) return data->ntoa_buffer; }
-static const char *debugstr_wsaioctl(DWORD ioctl) +static const char *debugstr_wsaioctl(DWORD code) { - const char *buf_type, *family; + const char *name = NULL, *buf_type, *family;
- switch(ioctl & 0x18000000) +#define IOCTL_NAME(x) case x: name = #x; break + switch (code) + { + IOCTL_NAME(WS_FIONBIO); + IOCTL_NAME(WS_FIONREAD); + IOCTL_NAME(WS_SIOCATMARK); + /* IOCTL_NAME(WS_SIO_ACQUIRE_PORT_RESERVATION); */ + IOCTL_NAME(WS_SIO_ADDRESS_LIST_CHANGE); + IOCTL_NAME(WS_SIO_ADDRESS_LIST_QUERY); + IOCTL_NAME(WS_SIO_ASSOCIATE_HANDLE); + /* IOCTL_NAME(WS_SIO_ASSOCIATE_PORT_RESERVATION); + IOCTL_NAME(WS_SIO_BASE_HANDLE); + IOCTL_NAME(WS_SIO_BSP_HANDLE); + IOCTL_NAME(WS_SIO_BSP_HANDLE_SELECT); + IOCTL_NAME(WS_SIO_BSP_HANDLE_POLL); + IOCTL_NAME(WS_SIO_CHK_QOS); */ + IOCTL_NAME(WS_SIO_ENABLE_CIRCULAR_QUEUEING); + IOCTL_NAME(WS_SIO_FIND_ROUTE); + IOCTL_NAME(WS_SIO_FLUSH); + IOCTL_NAME(WS_SIO_GET_BROADCAST_ADDRESS); + IOCTL_NAME(WS_SIO_GET_EXTENSION_FUNCTION_POINTER); + IOCTL_NAME(WS_SIO_GET_GROUP_QOS); + IOCTL_NAME(WS_SIO_GET_INTERFACE_LIST); + /* IOCTL_NAME(WS_SIO_GET_INTERFACE_LIST_EX); */ + IOCTL_NAME(WS_SIO_GET_QOS); + /* IOCTL_NAME(WS_SIO_IDEAL_SEND_BACKLOG_CHANGE); + IOCTL_NAME(WS_SIO_IDEAL_SEND_BACKLOG_QUERY); */ + IOCTL_NAME(WS_SIO_KEEPALIVE_VALS); + IOCTL_NAME(WS_SIO_MULTIPOINT_LOOPBACK); + IOCTL_NAME(WS_SIO_MULTICAST_SCOPE); + /* IOCTL_NAME(WS_SIO_QUERY_RSS_SCALABILITY_INFO); + IOCTL_NAME(WS_SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE); */ + IOCTL_NAME(WS_SIO_RCVALL); + IOCTL_NAME(WS_SIO_RCVALL_IGMPMCAST); + IOCTL_NAME(WS_SIO_RCVALL_MCAST); + /* IOCTL_NAME(WS_SIO_RELEASE_PORT_RESERVATION); */ + IOCTL_NAME(WS_SIO_ROUTING_INTERFACE_CHANGE); + IOCTL_NAME(WS_SIO_ROUTING_INTERFACE_QUERY); + IOCTL_NAME(WS_SIO_SET_COMPATIBILITY_MODE); + IOCTL_NAME(WS_SIO_SET_GROUP_QOS); + IOCTL_NAME(WS_SIO_SET_QOS); + IOCTL_NAME(WS_SIO_TRANSLATE_HANDLE); + IOCTL_NAME(WS_SIO_UDP_CONNRESET); + } +#undef IOCTL_NAME + + if (name) + return name + 3; + + /* If this is not a known code split its bits */ + switch(code & 0x18000000) { case WS_IOC_WS2: family = "IOC_WS2"; @@ -4410,12 +4460,12 @@ static const char *debugstr_wsaioctl(DWORD ioctl) break; default: /* WS_IOC_UNIX */ { - BYTE size = (ioctl >> 16) & WS_IOCPARM_MASK; - char x = (ioctl & 0xff00) >> 8; - BYTE y = ioctl & 0xff; + BYTE size = (code >> 16) & WS_IOCPARM_MASK; + char x = (code & 0xff00) >> 8; + BYTE y = code & 0xff; char args[14];
- switch (ioctl & (WS_IOC_VOID|WS_IOC_INOUT)) + switch (code & (WS_IOC_VOID|WS_IOC_INOUT)) { case WS_IOC_VOID: buf_type = "_IO"; @@ -4439,7 +4489,7 @@ static const char *debugstr_wsaioctl(DWORD ioctl) }
/* We are different from WS_IOC_UNIX. */ - switch (ioctl & (WS_IOC_VOID|WS_IOC_INOUT)) + switch (code & (WS_IOC_VOID|WS_IOC_INOUT)) { case WS_IOC_VOID: buf_type = "_WSAIO"; @@ -4459,7 +4509,7 @@ static const char *debugstr_wsaioctl(DWORD ioctl) }
return wine_dbg_sprintf("%s(%s, %d)", buf_type, family, - (USHORT)(ioctl & 0xffff)); + (USHORT)(code & 0xffff)); }
/* do an ioctl call through the server */