From df3fd62f7f0c51c11e7f715c2523418c31eb6b0f Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Fri, 7 Jul 2017 15:27:50 -0700 Subject: [PATCH 10/12] Define res_ninit and res_nclose for non-glibc platforms Signed-off-by: Khem Raj --- net/dns/dns_config_service_posix.cc | 4 ++++ net/dns/dns_reloader.cc | 4 ++++ net/dns/resolv_compat.h | 29 +++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 net/dns/resolv_compat.h diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc index ba8a36913..e9b40d07f 100644 --- a/net/dns/dns_config_service_posix.cc +++ b/net/dns/dns_config_service_posix.cc @@ -25,6 +25,10 @@ #include "net/dns/notify_watcher_mac.h" #include "net/dns/serial_worker.h" +#if defined(OS_LINUX) && !defined(__GLIBC__) +#include "net/dns/resolv_compat.h" +#endif + #if defined(OS_MACOSX) && !defined(OS_IOS) #include "net/dns/dns_config_watcher_mac.h" #endif diff --git a/net/dns/dns_reloader.cc b/net/dns/dns_reloader.cc index 74534e6b1..2780a776e 100644 --- a/net/dns/dns_reloader.cc +++ b/net/dns/dns_reloader.cc @@ -9,6 +9,10 @@ #include +#if defined(OS_LINUX) && !defined(__GLIBC__) +#include "net/dns/resolv_compat.h" +#endif + #include "base/lazy_instance.h" #include "base/logging.h" #include "base/macros.h" diff --git a/net/dns/resolv_compat.h b/net/dns/resolv_compat.h new file mode 100644 index 000000000..4f0e852a1 --- /dev/null +++ b/net/dns/resolv_compat.h @@ -0,0 +1,29 @@ +#if !defined(__GLIBC__) +/*************************************************************************** + * resolv_compat.h + * + * Mimick GLIBC's res_ninit() and res_nclose() for musl libc + * Note: res_init() is actually deprecated according to + * http://docs.oracle.com/cd/E36784_01/html/E36875/res-nclose-3resolv.html + **************************************************************************/ +#include + +static inline int res_ninit(res_state statp) +{ + int rc = res_init(); + if (statp != &_res) { + memcpy(statp, &_res, sizeof(*statp)); + } + return rc; +} + +static inline int res_nclose(res_state statp) +{ + if (!statp) + return -1; + if (statp != &_res) { + memset(statp, 0, sizeof(*statp)); + } + return 0; +} +#endif -- 2.13.2