Bruno Jesus : ws2_32: Debug the ioctl code name whenever possible.
Alexandre Julliard
julliard at winehq.org
Wed Sep 7 10:48:41 CDT 2016
Module: wine
Branch: master
Commit: 048964b40e1518c985e907d99ec606b4dd619444
URL: http://source.winehq.org/git/wine.git/?a=commit;h=048964b40e1518c985e907d99ec606b4dd619444
Author: Bruno Jesus <00cpxxx at 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 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at 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 */
More information about the wine-cvs
mailing list