[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