dns: Support Musl

This commit is contained in:
klzgrad 2019-11-30 22:21:18 +08:00
parent f1788b0ba0
commit ca86d3ff05
2 changed files with 14 additions and 2 deletions

View File

@ -150,7 +150,7 @@ ConfigParsePosixResult ReadDnsConfig(DnsConfig* dns_config) {
#if !defined(OS_ANDROID)
ConfigParsePosixResult result;
// TODO(fuchsia): Use res_ninit() when it's implemented on Fuchsia.
#if defined(OS_OPENBSD) || defined(OS_FUCHSIA)
#if defined(OS_OPENBSD) || defined(OS_FUCHSIA) || defined(__UCLIBC__)
// Note: res_ninit in glibc always returns 0 and sets RES_INIT.
// res_init behaves the same way.
memset(&_res, 0, sizeof(_res));

View File

@ -60,20 +60,32 @@ class DnsReloader : public NetworkChangeNotifier::DNSObserver {
if (!reload_state) {
auto new_reload_state = std::make_unique<ReloadState>();
new_reload_state->resolver_generation = resolver_generation_;
#ifndef __UCLIBC__
res_ninit(&_res);
#else
res_init();
#endif
tls_reload_state_.Set(std::move(new_reload_state));
} else if (reload_state->resolver_generation != resolver_generation_) {
reload_state->resolver_generation = resolver_generation_;
// It is safe to call res_nclose here since we know res_ninit will have
// been called above.
#ifndef __UCLIBC__
res_nclose(&_res);
res_ninit(&_res);
#else
res_init();
#endif
}
}
private:
struct ReloadState {
~ReloadState() { res_nclose(&_res); }
~ReloadState() {
#ifndef __UCLIBC__
res_nclose(&_res);
#endif
}
int resolver_generation;
};