Make res_init() work again.
Change 75830fb836621ebbcf68155e466983eb231f9ca1 to fix _nres
initialization to be thread safe accidentally introduced a behavior
change whereby res_init() became a no-op. It also failed to remove all
direct accesses to _nres.
Move the file over to C++ so we can let RAII ensure we're always holding
a lock while using the global state, make all callers access the global
state via this class, and restore the previous behavior of res_init().
Test: atest DnsResolverTest
Bug: 166235340
Change-Id: Ib390a7eac063bc0ff5eeba755e8c74ef1383004e
diff --git a/libc/dns/net/getservent.c b/libc/dns/net/getservent.c
index 03add59..6a50d23 100644
--- a/libc/dns/net/getservent.c
+++ b/libc/dns/net/getservent.c
@@ -35,7 +35,7 @@
#include "resolv_static.h"
#include "services.h"
-struct servent* getservent_r(res_static rs) {
+struct servent* getservent_r(struct res_static* rs) {
const char* p;
const char* q;
int namelen;
@@ -109,17 +109,17 @@
}
void endservent(void) {
- res_static rs = __res_get_static();
+ struct res_static* rs = __res_get_static();
if (rs) rs->servent_ptr = NULL;
}
struct servent* getservent(void) {
- res_static rs = __res_get_static();
+ struct res_static* rs = __res_get_static();
return rs ? getservent_r(rs) : NULL;
}
struct servent* getservbyname(const char* name, const char* proto) {
- res_static rs = __res_get_static();
+ struct res_static* rs = __res_get_static();
if (rs == NULL) return NULL;
const char* old_servent_ptr = rs->servent_ptr;
@@ -135,7 +135,7 @@
}
struct servent* getservbyport(int port, const char* proto) {
- res_static rs = __res_get_static();
+ struct res_static* rs = __res_get_static();
if (rs == NULL) return NULL;
const char* old_servent_ptr = rs->servent_ptr;