From b27b336a7a2a62a2612bfc97a7333f6f94b63d66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Thu, 29 Sep 2022 16:14:13 +0200 Subject: [PATCH] src: remove ParseIP() in cares_wrap.cc This function is only used in one place where the result argument is never nullptr, so remove special handling of that case. Also, instead of returning magic values 0/4/6 and then later translating those into error/AF_INET/AF_INET6, use AF_INET/AF_INET6 directly. Lastly, inline the function, which is simpler overall. PR-URL: https://github.com/nodejs/node/pull/44771 Reviewed-By: Luigi Pinca Reviewed-By: Daeyeon Jeong Reviewed-By: Ben Noordhuis Reviewed-By: James M Snell Reviewed-By: Rich Trott Reviewed-By: Matteo Collina Reviewed-By: Minwoo Jung --- src/cares_wrap.cc | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index eb3ebceeca6622..959f609fdee877 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -1533,28 +1533,18 @@ void AfterGetNameInfo(uv_getnameinfo_t* req, req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv); } -using ParseIPResult = - decltype(static_cast(nullptr)->addr); - -int ParseIP(const char* ip, ParseIPResult* result = nullptr) { - ParseIPResult tmp; - if (result == nullptr) result = &tmp; - if (0 == uv_inet_pton(AF_INET, ip, result)) return 4; - if (0 == uv_inet_pton(AF_INET6, ip, result)) return 6; - return 0; -} - void CanonicalizeIP(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); node::Utf8Value ip(isolate, args[0]); - ParseIPResult result; - const int rc = ParseIP(*ip, &result); - if (rc == 0) return; + int af; + unsigned char result[sizeof(ares_addr_port_node::addr)]; + if (uv_inet_pton(af = AF_INET, *ip, result) != 0 && + uv_inet_pton(af = AF_INET6, *ip, result) != 0) + return; char canonical_ip[INET6_ADDRSTRLEN]; - const int af = (rc == 4 ? AF_INET : AF_INET6); - CHECK_EQ(0, uv_inet_ntop(af, &result, canonical_ip, sizeof(canonical_ip))); + CHECK_EQ(0, uv_inet_ntop(af, result, canonical_ip, sizeof(canonical_ip))); Local val = String::NewFromUtf8(isolate, canonical_ip) .ToLocalChecked(); args.GetReturnValue().Set(val);