network: use getservbyport() only if available
authorMans Rullgard <mans@mansr.com>
Sun, 14 Oct 2012 19:24:51 +0000 (20:24 +0100)
committerMans Rullgard <mans@mansr.com>
Tue, 23 Oct 2012 11:00:21 +0000 (12:00 +0100)
The absence of this function will only give a less informative
string back from our fallback implementation of getnameinfo().

Signed-off-by: Mans Rullgard <mans@mansr.com>
configure
libavformat/os_support.c

index 996c716..e1524fb 100755 (executable)
--- a/configure
+++ b/configure
@@ -1190,6 +1190,7 @@ HAVE_LIST="
     GetProcessTimes
     GetSystemTimeAsFileTime
     getrusage
     GetProcessTimes
     GetSystemTimeAsFileTime
     getrusage
+    getservbyport
     gettimeofday
     gnu_as
     ibm_asm
     gettimeofday
     gnu_as
     ibm_asm
@@ -3158,6 +3159,7 @@ if enabled network; then
     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
     check_type netinet/sctp.h "struct sctp_event_subscribe"
     check_func getaddrinfo $network_extralibs
     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
     check_type netinet/sctp.h "struct sctp_event_subscribe"
     check_func getaddrinfo $network_extralibs
+    check_func getservbyport $network_extralibs
     # Prefer arpa/inet.h over winsock2
     if check_header arpa/inet.h ; then
         check_func closesocket
     # Prefer arpa/inet.h over winsock2
     if check_header arpa/inet.h ; then
         check_func closesocket
index 7618708..451801f 100644 (file)
@@ -235,8 +235,10 @@ int ff_getnameinfo(const struct sockaddr *sa, int salen,
 
     if (serv && servlen > 0) {
         struct servent *ent = NULL;
 
     if (serv && servlen > 0) {
         struct servent *ent = NULL;
+#if HAVE_GETSERVBYPORT
         if (!(flags & NI_NUMERICSERV))
             ent = getservbyport(sin->sin_port, flags & NI_DGRAM ? "udp" : "tcp");
         if (!(flags & NI_NUMERICSERV))
             ent = getservbyport(sin->sin_port, flags & NI_DGRAM ? "udp" : "tcp");
+#endif
 
         if (ent)
             snprintf(serv, servlen, "%s", ent->s_name);
 
         if (ent)
             snprintf(serv, servlen, "%s", ent->s_name);