mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 06:16:30 +03:00
dns: Support Musl
This commit is contained in:
parent
f3b87ecf9d
commit
54af5860db
@ -93,7 +93,7 @@ absl::optional<DnsConfig> ReadDnsConfig() {
|
||||
|
||||
absl::optional<DnsConfig> dns_config;
|
||||
// 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(__MUSL__)
|
||||
// Note: res_ninit in glibc always returns 0 and sets RES_INIT.
|
||||
// res_init behaves the same way.
|
||||
memset(&_res, 0, sizeof(_res));
|
||||
|
@ -62,20 +62,32 @@ class DnsReloader : public NetworkChangeNotifier::DNSObserver {
|
||||
if (!reload_state) {
|
||||
auto new_reload_state = std::make_unique<ReloadState>();
|
||||
new_reload_state->resolver_generation = resolver_generation_;
|
||||
#ifdef __MUSL__
|
||||
res_init();
|
||||
#else
|
||||
res_ninit(&_res);
|
||||
#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.
|
||||
#ifdef __MUSL__
|
||||
res_init();
|
||||
#else
|
||||
res_nclose(&_res);
|
||||
res_ninit(&_res);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
struct ReloadState {
|
||||
~ReloadState() { res_nclose(&_res); }
|
||||
~ReloadState() {
|
||||
#ifndef __MUSL__
|
||||
res_nclose(&_res);
|
||||
#endif
|
||||
}
|
||||
|
||||
int resolver_generation;
|
||||
};
|
||||
|
@ -23,16 +23,23 @@ std::unique_ptr<struct __res_state> ResolvReader::GetResState() {
|
||||
auto res = std::make_unique<struct __res_state>();
|
||||
memset(res.get(), 0, sizeof(struct __res_state));
|
||||
|
||||
#if defined(__MUSL__)
|
||||
if (res_init() != 0)
|
||||
return nullptr;
|
||||
#else
|
||||
if (res_ninit(res.get()) != 0) {
|
||||
CloseResState(res.get());
|
||||
return nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void ResolvReader::CloseResState(struct __res_state* res) {
|
||||
#if !defined(__MUSL__)
|
||||
res_nclose(res);
|
||||
#endif
|
||||
}
|
||||
|
||||
absl::optional<std::vector<IPEndPoint>> GetNameservers(
|
||||
|
Loading…
Reference in New Issue
Block a user