{"thread":{"id":"19043","subject":"[PATCH] connect: replace inet_ntop with getnameinfo","startedAt":"2009-04-24T12:16:41Z","lastAt":"2009-04-24T12:16:41Z","messageCount":1,"participants":["Benjamin Kramer"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"112177","messageId":"49F1ADA9.5030301@googlemail.com","threadId":"19043","inReplyTo":null,"subject":"[PATCH] connect: replace inet_ntop with getnameinfo","fromName":"Benjamin Kramer","fromEmail":"benny.kra@googlemail.com","sentAt":"2009-04-24T12:16:41Z","receivedAt":"2009-04-24T12:16:41Z","isPatch":true,"sender":{"key":"benny.kra@googlemail.com","avatar":"https://avatars.githubusercontent.com/u/16542?v=4"},"body":"inet_ntop is not protocol independent.\ngetnameinfo(3) is part of POSIX and is available when getaddrinfo(3) is.\nThis code is only compiled when NO_IPV6 isn't defined.\n\nThe old method was buggy anyway, not every ipv6 address was converted\nproperly because the buffer (addr) was too small.\n\nSigned-off-by: Benjamin Kramer <benny.kra@googlemail.com>\n---\n connect.c |   15 ++++-----------\n 1 files changed, 4 insertions(+), 11 deletions(-)\n\ndiff --git a/connect.c b/connect.c\nindex 7636bf9..f6b8ba6 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -177,18 +177,11 @@ static enum protocol get_protocol(const char *name)\n \n static const char *ai_name(const struct addrinfo *ai)\n {\n-\tstatic char addr[INET_ADDRSTRLEN];\n-\tif ( AF_INET == ai->ai_family ) {\n-\t\tstruct sockaddr_in *in;\n-\t\tin = (struct sockaddr_in *)ai->ai_addr;\n-\t\tinet_ntop(ai->ai_family, &in->sin_addr, addr, sizeof(addr));\n-\t} else if ( AF_INET6 == ai->ai_family ) {\n-\t\tstruct sockaddr_in6 *in;\n-\t\tin = (struct sockaddr_in6 *)ai->ai_addr;\n-\t\tinet_ntop(ai->ai_family, &in->sin6_addr, addr, sizeof(addr));\n-\t} else {\n+\tstatic char addr[NI_MAXHOST];\n+\tif (getnameinfo(ai->ai_addr, ai->ai_addrlen, addr, sizeof(addr), NULL, 0,\n+\t\t\tNI_NUMERICHOST) != 0)\n \t\tstrcpy(addr, \"(unknown)\");\n-\t}\n+\n \treturn addr;\n }\n \n-- \n1.6.3.rc1.53.gadc1\n"}]}