[FFmpeg-cvslog] r21443 - trunk/libavformat/os_support.c

ramiro subversion
Mon Jan 25 02:28:02 CET 2010


Author: ramiro
Date: Mon Jan 25 02:28:01 2010
New Revision: 21443

Log:
Load the proper getaddrinfo functions from ws2_32.dll, if they're present.

Patch by Martin Storsj? <martin at martin dot st>.

Modified:
   trunk/libavformat/os_support.c

Modified: trunk/libavformat/os_support.c
==============================================================================
--- trunk/libavformat/os_support.c	Mon Jan 25 02:26:54 2010	(r21442)
+++ trunk/libavformat/os_support.c	Mon Jan 25 02:28:01 2010	(r21443)
@@ -68,6 +68,16 @@ int ff_getaddrinfo(const char *node, con
     struct addrinfo *ai;
     struct sockaddr_in *sin;
 
+#if HAVE_WINSOCK2_H
+    int (WSAAPI *win_getaddrinfo)(const char *node, const char *service,
+                                  const struct addrinfo *hints,
+                                  struct addrinfo **res);
+    HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
+    win_getaddrinfo = GetProcAddress(ws2mod, "getaddrinfo");
+    if (win_getaddrinfo)
+        return win_getaddrinfo(node, service, hints, res);
+#endif
+
     sin = av_mallocz(sizeof(struct sockaddr_in));
     if (!sin)
         return EAI_FAIL;
@@ -124,6 +134,17 @@ int ff_getaddrinfo(const char *node, con
 
 void ff_freeaddrinfo(struct addrinfo *res)
 {
+#if HAVE_WINSOCK2_H
+    void (WSAAPI *win_freeaddrinfo)(struct addrinfo *res);
+    HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
+    win_freeaddrinfo = (void (WSAAPI *)(struct addrinfo *res))
+                       GetProcAddress(ws2mod, "freeaddrinfo");
+    if (win_freeaddrinfo) {
+        win_freeaddrinfo(res);
+        return;
+    }
+#endif
+
     av_free(res->ai_canonname);
     av_free(res->ai_addr);
     av_free(res);
@@ -135,6 +156,16 @@ int ff_getnameinfo(const struct sockaddr
 {
     const struct sockaddr_in *sin = (const struct sockaddr_in *)sa;
 
+#if HAVE_WINSOCK2_H
+    int (WSAAPI *win_getnameinfo)(const struct sockaddr *sa, socklen_t salen,
+                                  char *host, DWORD hostlen,
+                                  char *serv, DWORD servlen, int flags);
+    HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
+    win_getnameinfo = GetProcAddress(ws2mod, "getnameinfo");
+    if (win_getnameinfo)
+        return win_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);
+#endif
+
     if (sa->sa_family != AF_INET)
         return EAI_FAMILY;
     if (!host && !serv)



More information about the ffmpeg-cvslog mailing list