Add IPv6 support by implementing name resolution with the protocol agnostic getaddrinfo(3) API. The old gethostbyname(3) code is still available when git is compiled with NO_IPV6. Signed-off-by: Elia Pinto <gitter.spiros@xxxxxxxxx> --- ident.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/ident.c b/ident.c index 5ff1aad..86b62be 100644 --- a/ident.c +++ b/ident.c @@ -69,6 +69,34 @@ static int add_mailname_host(struct strbuf *buf) fclose(mailname); return 0; } +#ifndef NO_IPV6 + +static void add_domainname(struct strbuf *out) +{ + char buf[1024]; + struct addrinfo hints, *ai; + int gai; + + if (gethostname(buf, sizeof(buf))) { + warning("cannot get host name: %s", strerror(errno)); + strbuf_addstr(out, "(none)"); + return; + } + if (strchr(buf, '.')) + strbuf_addstr(out, buf); + else { + memset (&hints, '\0', sizeof (hints)); + hints.ai_flags = AI_CANONNAME; + if (!(gai = getaddrinfo(buf, NULL, &hints, &ai)) && ai && strchr(ai->ai_canonname, '.')) { + strbuf_addstr(out, ai->ai_canonname); + freeaddrinfo(ai); + } + else + strbuf_addf(out, "%s.(none)", buf); + } +} +#else /* NO_IPV6 */ + static void add_domainname(struct strbuf *out) { @@ -88,6 +116,8 @@ static void add_domainname(struct strbuf *out) strbuf_addf(out, "%s.(none)", buf); } +#endif /* NO_IPV6 */ + static void copy_email(const struct passwd *pw, struct strbuf *email) { /* -- 2.3.3.GIT -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html