ws2_32: Debug the ioctl code name whenever possible

Bruno Jesus 00cpxxx at gmail.com
Tue Sep 6 13:30:35 CDT 2016


Also change the variable name because it is the same as the system function.

Turns this:
trace:winsock:WSAIoctl 0078, _IOW('f', 126, 4), 0x34eb28, 4, 0x34eb28, 4, 0x34eaec, (nil), (nil)

Into this:
trace:winsock:WSAIoctl 02c4, FIONBIO, 0x3bbc4d8, 4, 0x3bbc4d8, 4, 0x3bbc42c, (nil), (nil)

Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
---
 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 */
-- 
2.9.3




More information about the wine-patches mailing list