[vlc-commits] contrib: microdns: fix Android ifaddrs detection

Thomas Guillem git at videolan.org
Tue Oct 23 17:25:14 CEST 2018


vlc/vlc-3.0 | branch: master | Thomas Guillem <thomas at gllm.fr> | Tue Oct 23 14:08:42 2018 +0200| [e0736ec3fd2af8a2be35357256b06d88ab53b3d8] | committer: Thomas Guillem

contrib: microdns: fix Android ifaddrs detection

Fixes Android NDK 17+ build

(cherry picked from commit 161c74fecc4a2b9503f56e7e9f790daa770ce82a)

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=e0736ec3fd2af8a2be35357256b06d88ab53b3d8
---

 .../0001-build-fix-getifaddrs-detection.patch      | 79 ++++++++++++++++++++++
 .../0002-fix-dummy-mdns_list_interfaces.patch      | 33 +++++++++
 contrib/src/microdns/rules.mak                     |  2 +
 3 files changed, 114 insertions(+)

diff --git a/contrib/src/microdns/0001-build-fix-getifaddrs-detection.patch b/contrib/src/microdns/0001-build-fix-getifaddrs-detection.patch
new file mode 100644
index 0000000000..0b6d93c2c9
--- /dev/null
+++ b/contrib/src/microdns/0001-build-fix-getifaddrs-detection.patch
@@ -0,0 +1,79 @@
+From b9b10be3ea0e7ffe660747f35f11dc6b896883fc Mon Sep 17 00:00:00 2001
+From: Victorien Le Couviour--Tuffet <victorien.lecouviour.tuffet at gmail.com>
+Date: Tue, 11 Sep 2018 17:38:25 +0200
+Subject: [PATCH 1/2] build: fix getifaddrs detection
+
+Before this was determined by the presence of a struct member, but for
+android target, the NDK will provide the struct but not necessarily the
+related functions.
+---
+ compat/compat.h | 2 +-
+ configure.ac    | 7 ++-----
+ src/mdns.c      | 6 +++---
+ 3 files changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/compat/compat.h b/compat/compat.h
+index ef4103c..dd78134 100644
+--- a/compat/compat.h
++++ b/compat/compat.h
+@@ -99,7 +99,7 @@ typedef DWORD multicast_if;
+ 
+ #else
+ 
+-# if HAVE_IFADDRS
++# if HAVE_IFADDRS_H
+ #include <ifaddrs.h>
+ typedef struct sockaddr_storage multicast_if;
+ # else
+diff --git a/configure.ac b/configure.ac
+index 489e233..f0b3be2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -257,11 +257,8 @@ AC_CHECK_TYPES([struct pollfd],,,
+ #endif
+ ])
+ 
+-
+-AC_CHECK_MEMBER([struct ifaddrs.ifa_addr],[
+-    AC_DEFINE([HAVE_IFADDRS],[1],[Define to 1 if you have ifaddrs.ifa_addr function])],
+-    [],[[#include <ifaddrs.h>]])
+-
++AC_CHECK_FUNCS([getifaddrs])
++AC_CHECK_HEADERS([ifaddrs.h])
+ 
+ AC_SUBST([LIBSOCKET])
+ 
+diff --git a/src/mdns.c b/src/mdns.c
+index 55c5cb4..d3c29b1 100644
+--- a/src/mdns.c
++++ b/src/mdns.c
+@@ -73,7 +73,7 @@ extern void rr_print(const struct rr_entry *);
+ extern void rr_free(struct rr_entry *);
+ 
+ #ifndef _WIN32
+-#if HAVE_IFADDRS
++#if HAVE_GETIFADDRS
+ 
+ static bool
+ mdns_is_interface_valuable(struct ifaddrs* ifa)
+@@ -139,7 +139,7 @@ mdns_list_interfaces(multicast_if** pp_intfs, size_t* p_nb_intf, int ai_family)
+         *p_nb_intf = 1;
+         return (0);
+ }
+-#endif // HAVE_IFADDRS
++#endif // HAVE_GETIFADDRS
+ 
+ #else // _WIN32
+ 
+@@ -332,7 +332,7 @@ mdns_init(struct mdns_ctx **p_ctx, const char *addr, unsigned short port)
+                     return mdns_destroy(ctx), (MDNS_NETERR);
+             }
+ 
+-#if defined(HAVE_IFADDRS) || defined(_WIN32)
++#if defined(HAVE_GETIFADDRS) || defined(_WIN32)
+             if (setsockopt(ctx->conns[i].sock,
+                            ctx->conns[i].family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6,
+                            ctx->conns[i].family == AF_INET ? IP_MULTICAST_IF : IPV6_MULTICAST_IF,
+-- 
+2.19.1
+
diff --git a/contrib/src/microdns/0002-fix-dummy-mdns_list_interfaces.patch b/contrib/src/microdns/0002-fix-dummy-mdns_list_interfaces.patch
new file mode 100644
index 0000000000..3644df97fb
--- /dev/null
+++ b/contrib/src/microdns/0002-fix-dummy-mdns_list_interfaces.patch
@@ -0,0 +1,33 @@
+From f5a9f81eb7635fb3bb31a305e88cf02f0b9ec7b3 Mon Sep 17 00:00:00 2001
+From: Thomas Guillem <thomas at gllm.fr>
+Date: Tue, 23 Oct 2018 13:56:47 +0200
+Subject: [PATCH 2/2] fix dummy mdns_list_interfaces
+
+In case multicast_if is a valid struct and not a void *. This can happen when
+getifaddr headers are present but not the function.
+---
+ src/mdns.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/mdns.c b/src/mdns.c
+index d3c29b1..e499195 100644
+--- a/src/mdns.c
++++ b/src/mdns.c
+@@ -132,10 +132,11 @@ mdns_list_interfaces(multicast_if** pp_intfs, size_t* p_nb_intf, int ai_family)
+ static size_t
+ mdns_list_interfaces(multicast_if** pp_intfs, size_t* p_nb_intf, int ai_family)
+ {
+-        *pp_intfs = malloc(sizeof(**pp_intfs));
+-        if (*pp_intfs == NULL)
++        multicast_if *intfs;
++        *pp_intfs = intfs = malloc(sizeof(*intfs));
++        if (intfs == NULL)
+                 return (MDNS_ERROR);
+-        **pp_intfs = NULL;
++        memset(intfs, 0, sizeof(*intfs));
+         *p_nb_intf = 1;
+         return (0);
+ }
+-- 
+2.19.1
+
diff --git a/contrib/src/microdns/rules.mak b/contrib/src/microdns/rules.mak
index dcc5a7f423..e6a766d844 100644
--- a/contrib/src/microdns/rules.mak
+++ b/contrib/src/microdns/rules.mak
@@ -19,6 +19,8 @@ $(TARBALLS)/microdns-$(LIBMICRODNS_VERSION).tar.gz:
 
 microdns: microdns-$(LIBMICRODNS_VERSION).tar.gz .sum-microdns
 	$(UNPACK)
+	$(APPLY) $(SRC)/microdns/0001-build-fix-getifaddrs-detection.patch
+	$(APPLY) $(SRC)/microdns/0002-fix-dummy-mdns_list_interfaces.patch
 	$(MOVE)
 
 .microdns: microdns



More information about the vlc-commits mailing list