Index: patched-ffmpeg-mt/libavformat/os_support.c |
=================================================================== |
--- patched-ffmpeg-mt/libavformat/os_support.c (revision 41250) |
+++ patched-ffmpeg-mt/libavformat/os_support.c (working copy) |
@@ -22,6 +22,7 @@ |
/* needed by inet_aton() */ |
#define _SVID_SOURCE |
+#define _DARWIN_C_SOURCE |
#include "config.h" |
#include "avformat.h" |
@@ -45,7 +46,7 @@ |
#include <stdlib.h> |
#include <strings.h> |
-int inet_aton (const char * str, struct in_addr * add) |
+int ff_inet_aton (const char * str, struct in_addr * add) |
{ |
unsigned int add1 = 0, add2 = 0, add3 = 0, add4 = 0; |
@@ -58,6 +59,11 @@ |
return 1; |
} |
+#else |
+int ff_inet_aton (const char * str, struct in_addr * add) |
+{ |
+ return inet_aton(str, add); |
+} |
#endif /* !HAVE_INET_ATON */ |
#if !HAVE_GETADDRINFO |
@@ -78,13 +84,14 @@ |
return win_getaddrinfo(node, service, hints, res); |
#endif |
+ *res = NULL; |
sin = av_mallocz(sizeof(struct sockaddr_in)); |
if (!sin) |
return EAI_FAIL; |
sin->sin_family = AF_INET; |
if (node) { |
- if (!inet_aton(node, &sin->sin_addr)) { |
+ if (!ff_inet_aton(node, &sin->sin_addr)) { |
if (hints && (hints->ai_flags & AI_NUMERICHOST)) { |
av_free(sin); |
return EAI_FAIL; |
@@ -203,42 +210,18 @@ |
return 0; |
} |
-#endif |
-/* resolve host with also IP address parsing */ |
-int resolve_host(struct in_addr *sin_addr, const char *hostname) |
+const char *ff_gai_strerror(int ecode) |
{ |
- |
- if (!inet_aton(hostname, sin_addr)) { |
-#if HAVE_GETADDRINFO |
- struct addrinfo *ai, *cur; |
- struct addrinfo hints; |
- memset(&hints, 0, sizeof(hints)); |
- hints.ai_family = AF_INET; |
- if (getaddrinfo(hostname, NULL, &hints, &ai)) |
- return -1; |
- /* getaddrinfo returns a linked list of addrinfo structs. |
- * Even if we set ai_family = AF_INET above, make sure |
- * that the returned one actually is of the correct type. */ |
- for (cur = ai; cur; cur = cur->ai_next) { |
- if (cur->ai_family == AF_INET) { |
- *sin_addr = ((struct sockaddr_in *)cur->ai_addr)->sin_addr; |
- freeaddrinfo(ai); |
- return 0; |
- } |
- } |
- freeaddrinfo(ai); |
- return -1; |
-#else |
- struct hostent *hp; |
- hp = gethostbyname(hostname); |
- if (!hp) |
- return -1; |
- memcpy(sin_addr, hp->h_addr_list[0], sizeof(struct in_addr)); |
-#endif |
+ switch(ecode) { |
+ case EAI_FAIL : return "A non-recoverable error occurred"; |
+ case EAI_FAMILY : return "The address family was not recognized or the address length was invalid for the specified family"; |
+ case EAI_NONAME : return "The name does not resolve for the supplied parameters"; |
} |
- return 0; |
+ |
+ return "Unknown error"; |
} |
+#endif |
int ff_socket_nonblock(int socket, int enable) |
{ |