Commit 161c74fe authored by Thomas Guillem's avatar Thomas Guillem

contrib: microdns: fix Android ifaddrs detection

Fixes Android NDK 17+ build
parent a22cb071
From b9b10be3ea0e7ffe660747f35f11dc6b896883fc Mon Sep 17 00:00:00 2001
From: Victorien Le Couviour--Tuffet <victorien.lecouviour.tuffet@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
From f5a9f81eb7635fb3bb31a305e88cf02f0b9ec7b3 Mon Sep 17 00:00:00 2001
From: Thomas Guillem <thomas@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
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment