ws2_32(5/8): Implement ws_sockaddr_ws2u for AF_IRDA (try 3)

Juan Lang juan.lang at gmail.com
Tue Aug 11 14:22:08 CDT 2009


--Juan
-------------- next part --------------
From ee750fc789ae6a4f366782af4cf3bcd35cd098f4 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Tue, 11 Aug 2009 12:18:59 -0700
Subject: [PATCH 5/8] Implement ws_sockaddr_ws2u for AF_IRDA

---
 dlls/ws2_32/socket.c |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 5400ea4..39bc1c8 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -144,6 +144,7 @@
 #include "ws2spi.h"
 #include "wsipx.h"
 #include "mstcpip.h"
+#include "af_irda.h"
 #include "winnt.h"
 #include "iphlpapi.h"
 #include "wine/server.h"
@@ -951,6 +952,32 @@ static unsigned int ws_sockaddr_ws2u(const struct WS_sockaddr* wsaddr, int wsadd
         memcpy(&uin->sin_addr,&win->sin_addr,4); /* 4 bytes = 32 address bits */
         break;
     }
+#ifdef HAVE_IRDA
+    case WS_AF_IRDA: {
+        struct sockaddr_irda *uin = (struct sockaddr_irda *)uaddr;
+        const SOCKADDR_IRDA *win = (const SOCKADDR_IRDA *)wsaddr;
+
+        if (wsaddrlen < sizeof(SOCKADDR_IRDA))
+            return 0;
+        uaddrlen = sizeof(struct sockaddr_irda);
+        memset( uaddr, 0, uaddrlen );
+        uin->sir_family = AF_IRDA;
+        if (!strncmp( win->irdaServiceName, "LSAP-SEL", strlen( "LSAP-SEL" ) ))
+        {
+            unsigned int lsap_sel;
+
+            sscanf( win->irdaServiceName, "LSAP-SEL%u", &lsap_sel );
+            uin->sir_lsap_sel = lsap_sel;
+        }
+        else
+        {
+            uin->sir_lsap_sel = LSAP_ANY;
+            memcpy( uin->sir_name, win->irdaServiceName, 25 );
+        }
+        memcpy( &uin->sir_addr, win->irdaDeviceID, sizeof(uin->sir_addr) );
+        break;
+    }
+#endif
     case WS_AF_UNSPEC: {
         /* Try to determine the needed space by the passed windows sockaddr space */
         switch (wsaddrlen) {
@@ -963,6 +990,11 @@ static unsigned int ws_sockaddr_ws2u(const struct WS_sockaddr* wsaddr, int wsadd
             uaddrlen = sizeof(struct sockaddr_ipx);
             break;
 #endif
+#ifdef HAVE_IRDA
+        case sizeof(SOCKADDR_IRDA):
+            uaddrlen = sizeof(struct sockaddr_irda);
+            break;
+#endif
         case sizeof(struct WS_sockaddr_in6):
         case sizeof(struct WS_sockaddr_in6_old):
             uaddrlen = sizeof(struct sockaddr_in6);
-- 
1.6.3.2


More information about the wine-patches mailing list