comparison os_support.c @ 5588:866c497d9abd libavformat

Load the proper getaddrinfo functions from ws2_32.dll, if they're present. Patch by Martin Storsj <martin at martin dot st>.
author ramiro
date Mon, 25 Jan 2010 01:28:01 +0000
parents 8797851aeedb
children a3e321e7ca38
comparison
equal deleted inserted replaced
5587:0ab98b4a3778 5588:866c497d9abd
66 { 66 {
67 struct hostent *h = NULL; 67 struct hostent *h = NULL;
68 struct addrinfo *ai; 68 struct addrinfo *ai;
69 struct sockaddr_in *sin; 69 struct sockaddr_in *sin;
70 70
71 #if HAVE_WINSOCK2_H
72 int (WSAAPI *win_getaddrinfo)(const char *node, const char *service,
73 const struct addrinfo *hints,
74 struct addrinfo **res);
75 HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
76 win_getaddrinfo = GetProcAddress(ws2mod, "getaddrinfo");
77 if (win_getaddrinfo)
78 return win_getaddrinfo(node, service, hints, res);
79 #endif
80
71 sin = av_mallocz(sizeof(struct sockaddr_in)); 81 sin = av_mallocz(sizeof(struct sockaddr_in));
72 if (!sin) 82 if (!sin)
73 return EAI_FAIL; 83 return EAI_FAIL;
74 sin->sin_family = AF_INET; 84 sin->sin_family = AF_INET;
75 85
122 return 0; 132 return 0;
123 } 133 }
124 134
125 void ff_freeaddrinfo(struct addrinfo *res) 135 void ff_freeaddrinfo(struct addrinfo *res)
126 { 136 {
137 #if HAVE_WINSOCK2_H
138 void (WSAAPI *win_freeaddrinfo)(struct addrinfo *res);
139 HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
140 win_freeaddrinfo = (void (WSAAPI *)(struct addrinfo *res))
141 GetProcAddress(ws2mod, "freeaddrinfo");
142 if (win_freeaddrinfo) {
143 win_freeaddrinfo(res);
144 return;
145 }
146 #endif
147
127 av_free(res->ai_canonname); 148 av_free(res->ai_canonname);
128 av_free(res->ai_addr); 149 av_free(res->ai_addr);
129 av_free(res); 150 av_free(res);
130 } 151 }
131 152
132 int ff_getnameinfo(const struct sockaddr *sa, int salen, 153 int ff_getnameinfo(const struct sockaddr *sa, int salen,
133 char *host, int hostlen, 154 char *host, int hostlen,
134 char *serv, int servlen, int flags) 155 char *serv, int servlen, int flags)
135 { 156 {
136 const struct sockaddr_in *sin = (const struct sockaddr_in *)sa; 157 const struct sockaddr_in *sin = (const struct sockaddr_in *)sa;
158
159 #if HAVE_WINSOCK2_H
160 int (WSAAPI *win_getnameinfo)(const struct sockaddr *sa, socklen_t salen,
161 char *host, DWORD hostlen,
162 char *serv, DWORD servlen, int flags);
163 HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
164 win_getnameinfo = GetProcAddress(ws2mod, "getnameinfo");
165 if (win_getnameinfo)
166 return win_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);
167 #endif
137 168
138 if (sa->sa_family != AF_INET) 169 if (sa->sa_family != AF_INET)
139 return EAI_FAMILY; 170 return EAI_FAMILY;
140 if (!host && !serv) 171 if (!host && !serv)
141 return EAI_NONAME; 172 return EAI_NONAME;