Bruno Jesus : ws2_32: Use a helper function to set the IPX packet type.

Alexandre Julliard julliard at winehq.org
Tue Dec 31 11:11:44 CST 2013


Module: wine
Branch: master
Commit: 2d4adfc49eba7028a4038369c7a639de7a2f6f77
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2d4adfc49eba7028a4038369c7a639de7a2f6f77

Author: Bruno Jesus <00cpxxx at gmail.com>
Date:   Mon Dec 30 22:24:56 2013 -0200

ws2_32: Use a helper function to set the IPX packet type.

---

 dlls/ws2_32/socket.c |   53 +++++++++++++++++++++++++++++--------------------
 1 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 0d6838e..732bbad 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1159,6 +1159,36 @@ convert_socktype_u2w(int unixsocktype) {
     return -1;
 }
 
+static int set_ipx_packettype(int sock, int ptype)
+{
+#ifdef HAS_IPX
+    int fd = get_sock_fd( sock, 0, NULL ), ret = 0;
+    TRACE("trying to set IPX_PTYPE: %d (fd: %d)\n", ptype, fd);
+
+    /* We try to set the ipx type on ipx socket level. */
+#ifdef SOL_IPX
+    if(setsockopt(fd, SOL_IPX, IPX_TYPE, &ptype, sizeof(ptype)) == -1)
+    {
+        ERR("IPX: could not set ipx option type; expect weird behaviour\n");
+        ret = SOCKET_ERROR;
+    }
+#else
+    {
+        struct ipx val;
+        /* Should we retrieve val using a getsockopt call and then
+         * set the modified one? */
+        val.ipx_pt = ptype;
+        setsockopt(fd, 0, SO_DEFAULT_HEADERS, &val, sizeof(struct ipx));
+    }
+#endif
+    release_sock_fd( sock, fd );
+    return ret;
+#else
+    WARN("IPX support is not enabled, can't set packet type\n");
+    return SOCKET_ERROR;
+#endif
+}
+
 /* ----------------------------------- API -----
  *
  * Init / cleanup / error checking.
@@ -4772,28 +4802,7 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname,
         switch(optname)
         {
         case IPX_PTYPE:
-            fd = get_sock_fd( s, 0, NULL );
-            TRACE("trying to set IPX_PTYPE: %d (fd: %d)\n", *(const int*)optval, fd);
-
-            /* We try to set the ipx type on ipx socket level. */
-#ifdef SOL_IPX
-            if(setsockopt(fd, SOL_IPX, IPX_TYPE, optval, optlen) == -1)
-            {
-                ERR("IPX: could not set ipx option type; expect weird behaviour\n");
-                release_sock_fd( s, fd );
-                return SOCKET_ERROR;
-            }
-#else
-            {
-                struct ipx val;
-                /* Should we retrieve val using a getsockopt call and then
-                 * set the modified one? */
-                val.ipx_pt = *optval;
-                setsockopt(fd, 0, SO_DEFAULT_HEADERS, &val, sizeof(struct ipx));
-            }
-#endif
-            release_sock_fd( s, fd );
-            return 0;
+            return set_ipx_packettype(s, *(int*)optval);
 
         case IPX_FILTERPTYPE:
             /* Sets the receive filter packet type, at the moment we don't support it */




More information about the wine-cvs mailing list