[PATCH 3/5] ws2_32: Move name info functions to protocol.c.

Zebediah Figura z.figura12 at gmail.com
Fri Apr 30 19:10:00 CDT 2021


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/ws2_32/protocol.c       | 87 ++++++++++++++++++++++++++++++++++++
 dlls/ws2_32/socket.c         | 83 +---------------------------------
 dlls/ws2_32/ws2_32_private.h |  8 ++++
 3 files changed, 97 insertions(+), 81 deletions(-)

diff --git a/dlls/ws2_32/protocol.c b/dlls/ws2_32/protocol.c
index 5bbcdee3e0c..ecd564788d7 100644
--- a/dlls/ws2_32/protocol.c
+++ b/dlls/ws2_32/protocol.c
@@ -854,6 +854,93 @@ void WINAPI FreeAddrInfoExW( ADDRINFOEXW *ai )
 }
 
 
+static const int ws_niflag_map[][2] =
+{
+    MAP_OPTION( NI_NOFQDN ),
+    MAP_OPTION( NI_NUMERICHOST ),
+    MAP_OPTION( NI_NAMEREQD ),
+    MAP_OPTION( NI_NUMERICSERV ),
+    MAP_OPTION( NI_DGRAM ),
+};
+
+static int convert_niflag_w2u( int winflags )
+{
+    unsigned int i;
+    int unixflags = 0;
+
+    for (i = 0; i < ARRAY_SIZE(ws_niflag_map); i++)
+    {
+        if (ws_niflag_map[i][0] & winflags)
+        {
+            unixflags |= ws_niflag_map[i][1];
+            winflags &= ~ws_niflag_map[i][0];
+        }
+    }
+    if (winflags)
+        FIXME("Unhandled windows NI_xxx flags 0x%x\n", winflags);
+    return unixflags;
+}
+
+
+/***********************************************************************
+ *      getnameinfo   (ws2_32.@)
+ */
+int WINAPI WS_getnameinfo( const SOCKADDR *addr, WS_socklen_t addr_len, char *host,
+                           DWORD host_len, char *serv, DWORD serv_len, int flags )
+{
+#ifdef HAVE_GETNAMEINFO
+    int ret;
+    union generic_unix_sockaddr uaddr;
+    unsigned int uaddr_len;
+
+    TRACE( "addr %s, addr_len %d, host %p, host_len %u, serv %p, serv_len %d, flags %#x\n",
+           debugstr_sockaddr(addr), addr_len, host, host_len, serv, serv_len, flags );
+
+    uaddr_len = ws_sockaddr_ws2u( addr, addr_len, &uaddr );
+    if (!uaddr_len)
+    {
+        SetLastError( WSAEFAULT );
+        return WSA_NOT_ENOUGH_MEMORY;
+    }
+    ret = getnameinfo( &uaddr.addr, uaddr_len, host, host_len, serv, serv_len, convert_niflag_w2u(flags) );
+    return convert_eai_u2w( ret );
+#else
+    FIXME( "getnameinfo() failed, not found during buildtime.\n" );
+    return EAI_FAIL;
+#endif
+}
+
+
+/***********************************************************************
+ *      GetNameInfoW   (ws2_32.@)
+ */
+int WINAPI GetNameInfoW( const SOCKADDR *addr, WS_socklen_t addr_len, WCHAR *host,
+                         DWORD host_len, WCHAR *serv, DWORD serv_len, int flags )
+{
+    int ret;
+    char *hostA = NULL, *servA = NULL;
+
+    if (host && (!(hostA = HeapAlloc( GetProcessHeap(), 0, host_len ))))
+        return EAI_MEMORY;
+    if (serv && (!(servA = HeapAlloc( GetProcessHeap(), 0, serv_len ))))
+    {
+        HeapFree( GetProcessHeap(), 0, hostA );
+        return EAI_MEMORY;
+    }
+
+    ret = WS_getnameinfo( addr, addr_len, hostA, host_len, servA, serv_len, flags );
+    if (!ret)
+    {
+        if (host) MultiByteToWideChar( CP_ACP, 0, hostA, -1, host, host_len );
+        if (serv) MultiByteToWideChar( CP_ACP, 0, servA, -1, serv, serv_len );
+    }
+
+    HeapFree( GetProcessHeap(), 0, hostA );
+    HeapFree( GetProcessHeap(), 0, servA );
+    return ret;
+}
+
+
 static UINT host_errno_from_unix( int err )
 {
     WARN( "%d\n", err );
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 7313741e4b1..5ced4720558 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -235,12 +235,6 @@ static unsigned int if_addr_cache_size;
 static SOCKET *socket_list;
 static unsigned int socket_list_size;
 
-union generic_unix_sockaddr
-{
-    struct sockaddr addr;
-    char data[128];  /* should be big enough for all families */
-};
-
 const char *debugstr_sockaddr( const struct WS_sockaddr *a )
 {
     if (!a) return "(nil)";
@@ -717,15 +711,6 @@ static const int ws_socktype_map[][2] =
     {FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO},
 };
 
-static const int ws_niflag_map[][2] =
-{
-    MAP_OPTION( NI_NOFQDN ),
-    MAP_OPTION( NI_NUMERICHOST ),
-    MAP_OPTION( NI_NAMEREQD ),
-    MAP_OPTION( NI_NUMERICSERV ),
-    MAP_OPTION( NI_DGRAM ),
-};
-
 static const int ws_poll_map[][2] =
 {
     MAP_OPTION( POLLERR ),
@@ -1633,8 +1618,8 @@ static inline BOOL supported_pf(int pf)
 /* Returns the length of the converted address if successful, 0 if it was too
  * small to start with or unknown family or invalid address buffer.
  */
-static unsigned int ws_sockaddr_ws2u(const struct WS_sockaddr* wsaddr, int wsaddrlen,
-                                     union generic_unix_sockaddr *uaddr)
+unsigned int ws_sockaddr_ws2u( const struct WS_sockaddr *wsaddr, int wsaddrlen,
+                               union generic_unix_sockaddr *uaddr )
 {
     unsigned int uaddrlen = 0;
 
@@ -5860,70 +5845,6 @@ struct WS_servent* WINAPI WS_getservbyname(const char *name, const char *proto)
     return retval;
 }
 
-static int convert_niflag_w2u(int winflags) {
-    unsigned int i;
-    int unixflags = 0;
-
-    for (i = 0; i < ARRAY_SIZE(ws_niflag_map); i++)
-        if (ws_niflag_map[i][0] & winflags) {
-            unixflags |= ws_niflag_map[i][1];
-            winflags &= ~ws_niflag_map[i][0];
-        }
-    if (winflags)
-        FIXME("Unhandled windows NI_xxx flags 0x%x\n", winflags);
-    return unixflags;
-}
-
-int WINAPI WS_getnameinfo(const SOCKADDR *sa, WS_socklen_t salen, PCHAR host,
-                          DWORD hostlen, PCHAR serv, DWORD servlen, INT flags)
-{
-#ifdef HAVE_GETNAMEINFO
-    int ret;
-    union generic_unix_sockaddr sa_u;
-    unsigned int size;
-
-    TRACE("%s %d %p %d %p %d %d\n", debugstr_sockaddr(sa), salen, host, hostlen,
-          serv, servlen, flags);
-
-    size = ws_sockaddr_ws2u(sa, salen, &sa_u);
-    if (!size)
-    {
-        SetLastError(WSAEFAULT);
-        return WSA_NOT_ENOUGH_MEMORY;
-    }
-    ret = getnameinfo(&sa_u.addr, size, host, hostlen, serv, servlen, convert_niflag_w2u(flags));
-    return convert_eai_u2w(ret);
-#else
-    FIXME("getnameinfo() failed, not found during buildtime.\n");
-    return EAI_FAIL;
-#endif
-}
-
-int WINAPI GetNameInfoW(const SOCKADDR *sa, WS_socklen_t salen, PWCHAR host,
-                        DWORD hostlen, PWCHAR serv, DWORD servlen, INT flags)
-{
-    int ret;
-    char *hostA = NULL, *servA = NULL;
-
-    if (host && (!(hostA = HeapAlloc(GetProcessHeap(), 0, hostlen)))) return EAI_MEMORY;
-    if (serv && (!(servA = HeapAlloc(GetProcessHeap(), 0, servlen))))
-    {
-        HeapFree(GetProcessHeap(), 0, hostA);
-        return EAI_MEMORY;
-    }
-
-    ret = WS_getnameinfo(sa, salen, hostA, hostlen, servA, servlen, flags);
-    if (!ret)
-    {
-        if (host) MultiByteToWideChar(CP_ACP, 0, hostA, -1, host, hostlen);
-        if (serv) MultiByteToWideChar(CP_ACP, 0, servA, -1, serv, servlen);
-    }
-
-    HeapFree(GetProcessHeap(), 0, hostA);
-    HeapFree(GetProcessHeap(), 0, servA);
-    return ret;
-}
-
 /***********************************************************************
  *		getservbyport		(WS2_32.56)
  */
diff --git a/dlls/ws2_32/ws2_32_private.h b/dlls/ws2_32/ws2_32_private.h
index 121ce25ad1d..e86a3569510 100644
--- a/dlls/ws2_32/ws2_32_private.h
+++ b/dlls/ws2_32/ws2_32_private.h
@@ -161,11 +161,19 @@
 
 static const char magic_loopback_addr[] = {127, 12, 34, 56};
 
+union generic_unix_sockaddr
+{
+    struct sockaddr addr;
+    char data[128]; /* should be big enough for all families */
+};
+
 int convert_eai_u2w( int ret ) DECLSPEC_HIDDEN;
 int convert_socktype_u2w( int type ) DECLSPEC_HIDDEN;
 int convert_socktype_w2u( int type ) DECLSPEC_HIDDEN;
 int ws_sockaddr_u2ws( const struct sockaddr *unix_addr, struct WS_sockaddr *win_addr,
                       int *win_addr_len ) DECLSPEC_HIDDEN;
+unsigned int ws_sockaddr_ws2u( const struct WS_sockaddr *win_addr, int win_addr_len,
+                               union generic_unix_sockaddr *unix_addr ) DECLSPEC_HIDDEN;
 
 const char *debugstr_sockaddr( const struct WS_sockaddr *addr ) DECLSPEC_HIDDEN;
 
-- 
2.30.2




More information about the wine-devel mailing list