Skip to content

Commit

Permalink
src: remove ParseIP() in cares_wrap.cc
Browse files Browse the repository at this point in the history
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: #44771
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
  • Loading branch information
tniessen authored and juanarbol committed Oct 11, 2022
1 parent a7666ab commit 3e8569c
Showing 1 changed file with 6 additions and 16 deletions.
22 changes: 6 additions & 16 deletions src/cares_wrap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1532,28 +1532,18 @@ void AfterGetNameInfo(uv_getnameinfo_t* req,
req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv);
}

using ParseIPResult =
decltype(static_cast<ares_addr_port_node*>(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<Value>& 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<String> val = String::NewFromUtf8(isolate, canonical_ip)
.ToLocalChecked();
args.GetReturnValue().Set(val);
Expand Down

0 comments on commit 3e8569c

Please sign in to comment.