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/gethnamaddr.c b/libc/dns/net/gethnamaddr.c
index f8212a2..add124f 100644
--- a/libc/dns/net/gethnamaddr.c
+++ b/libc/dns/net/gethnamaddr.c
@@ -1537,7 +1537,7 @@
 gethostbyname(const char *name)
 {
 	struct hostent *result = NULL;
-	res_static rs = __res_get_static(); /* Use res_static to provide thread-safety. */
+	struct res_static* rs = __res_get_static();
 
 	gethostbyname_r(name, &rs->host, rs->hostbuf, sizeof(rs->hostbuf), &result, &h_errno);
 	return result;
@@ -1547,7 +1547,7 @@
 gethostbyname2(const char *name, int af)
 {
 	struct hostent *result = NULL;
-	res_static rs = __res_get_static(); /* Use res_static to provide thread-safety. */
+	struct res_static* rs = __res_get_static();
 
 	gethostbyname2_r(name, af, &rs->host, rs->hostbuf, sizeof(rs->hostbuf), &result, &h_errno);
 	return result;
@@ -1583,7 +1583,7 @@
 	res_state res = __res_get_state();
 	if (res == NULL)
 		return NULL;
-	res_static rs = __res_get_static(); /* Use res_static to provide thread-safety. */
+	struct res_static* rs = __res_get_static();
 	hp = gethostbyname_internal(name, af, res, &rs->host, rs->hostbuf, sizeof(rs->hostbuf),
 	                            &h_errno, netcontext);
 	__res_put_state(res);
@@ -1615,7 +1615,7 @@
 android_gethostbyaddrfornetcontext_proxy(const void* addr, socklen_t len, int af,
                                   const struct android_net_context *netcontext)
 {
-	res_static rs = __res_get_static(); /* Use res_static to provide thread-safety. */
+	struct res_static* rs = __res_get_static();
 	return android_gethostbyaddrfornetcontext_proxy_internal(addr, len, af, &rs->host, rs->hostbuf,
                                                     sizeof(rs->hostbuf), &h_errno, netcontext);
 }
@@ -1623,7 +1623,7 @@
 struct hostent *
 gethostent(void)
 {
-  res_static  rs = __res_get_static();
+  struct res_static* rs = __res_get_static();
 	if (!rs->hostf) {
 	  sethostent_r(&rs->hostf);
 	  if (!rs->hostf) {