Implement getaddrinfo/freeaddrinfo for MSN Messenger 7

Mike Hearn mike at plan99.net
Mon Oct 24 05:22:47 CDT 2005


Perhaps there should be a FreeAddrInfo forwarder here? I didn't
check against a real windows but it would make sense....

Mike Hearn <mh at codeweavers.com>
Implement getaddrinfo/freeaddrinfo for MSN Messenger 7

Index: dlls/winsock/socket.c
===================================================================
RCS file: /home/wine/wine/dlls/winsock/socket.c,v
retrieving revision 1.191
diff -u -p -d -u -r1.191 socket.c
--- dlls/winsock/socket.c	12 Sep 2005 22:07:53 -0000	1.191
+++ dlls/winsock/socket.c	24 Oct 2005 10:16:33 -0000
@@ -3,6 +3,7 @@
  * (ftp.microsoft.com:/Advsys/winsock/spec11/WINSOCK.TXT)
  *
  * Copyright (C) 1993,1994,1996,1997 John Brezak, Erik Bos, Alex Korobka.
+ *           (C) 2005 Mike Hearn
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -2860,6 +2861,48 @@ struct WS_servent* WINAPI WS_getservbyna
     return retval;
 }
 
+int WINAPI GetAddrInfoA(CHAR *nodename, CHAR *servname,
+                        const struct addrinfo *hints, struct addrinfo **res)
+{
+    BOOL  node_lowered = FALSE, serv_lowered = FALSE;
+    int   result;
+    
+    if (nodename)
+    {
+        if (!(nodename = strdup_lower(nodename))) return WSA_NOT_ENOUGH_MEMORY;
+        node_lowered = TRUE;
+    }
+    
+    if (servname)
+    {
+        if (!(servname = strdup_lower(servname))) return WSA_NOT_ENOUGH_MEMORY;
+        serv_lowered = TRUE;
+    }
+
+    /* getaddrinfo(3) is thread safe, no need to wrap in CS */
+    result = getaddrinfo(nodename, servname, hints, res);
+
+    TRACE("%s, %s %p -> %p %d\n", nodename, servname, hints, res, result);
+
+    if (node_lowered) HeapFree(GetProcessHeap(), 0, nodename);
+    if (serv_lowered) HeapFree(GetProcessHeap(), 0, servname);
+
+    return result;
+}
+
+int WINAPI GetAddrInfoW(WCHAR *nodename, WCHAR *servname,
+                        const struct addrinfo *hints, struct addrinfo **res)
+{
+    FIXME("stub\n");
+    return EAI_FAIL;
+}
+
+
+void WINAPI WS_freeaddrinfo(struct addrinfo *res)
+{
+    freeaddrinfo(res);
+}
+
 
 /***********************************************************************
  *		getservbyport		(WS2_32.56)
Index: dlls/winsock/ws2_32.spec
===================================================================
RCS file: /home/wine/wine/dlls/winsock/ws2_32.spec,v
retrieving revision 1.42
diff -u -p -d -u -r1.42 ws2_32.spec
--- dlls/winsock/ws2_32.spec	1 Aug 2005 10:56:49 -0000	1.42
+++ dlls/winsock/ws2_32.spec	24 Oct 2005 10:16:33 -0000
@@ -113,6 +113,8 @@
 @ stub    WSCUpdateProvider
 @ stub    WSCWriteNameSpaceOrder
 @ stdcall WSCWriteProviderOrder(ptr long)
-@ stub    freeaddrinfo
-@ stub    getaddrinfo
+@ stdcall freeaddrinfo(ptr) WS_freeaddrinfo
+@ stdcall getaddrinfo(str str ptr ptr) GetAddrInfoA
+@ stdcall GetAddrInfoW(wstr wstr ptr ptr)
+@ stdcall GetAddrInfoA(str str ptr ptr)
 @ stub    getnameinfo



More information about the wine-patches mailing list