Keep the different name resolution functions close together so they can learn from each other and perhaps share code in the future. Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Makefile | 2 +- daemon.c | 62 ++------------------------------------------------------------ tcp.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tcp.h | 3 +++ 4 files changed, 59 insertions(+), 61 deletions(-) diff --git a/Makefile b/Makefile index fa3a47f..df84157 100644 --- a/Makefile +++ b/Makefile @@ -1959,7 +1959,7 @@ builtin/prune.o builtin/reflog.o reachable.o: reachable.h builtin/commit.o builtin/revert.o wt-status.o: wt-status.h builtin/tar-tree.o archive-tar.o: tar.h connect.o transport.o http-backend.o: url.h -connect.o tcp.o: tcp.h +connect.o daemon.o tcp.o: tcp.h http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h diff --git a/daemon.c b/daemon.c index 3958cb6..3261616 100644 --- a/daemon.c +++ b/daemon.c @@ -1,5 +1,6 @@ #include "cache.h" #include "pkt-line.h" +#include "tcp.h" #include "exec_cmd.h" #include "run-command.h" #include "strbuf.h" @@ -432,65 +433,6 @@ static void parse_host_and_port(char *hostport, char **host, } } -#ifndef NO_IPV6 - -static void locate_host(const char *hostname, char **ip_address, - char **canon_hostname) -{ - struct addrinfo hints; - struct addrinfo *ai; - int gai; - static char addrbuf[HOST_NAME_MAX + 1]; - struct sockaddr_in *sin_addr; - - memset(&hints, 0, sizeof(hints)); - hints.ai_flags = AI_CANONNAME; - - gai = getaddrinfo(hostname, NULL, &hints, &ai); - if (gai) - return; - - sin_addr = (void *)ai->ai_addr; - inet_ntop(AF_INET, &sin_addr->sin_addr, addrbuf, sizeof(addrbuf)); - free(*ip_address); - *ip_address = xstrdup(addrbuf); - - free(*canon_hostname); - *canon_hostname = xstrdup(ai->ai_canonname ? - ai->ai_canonname : *ip_address); - - freeaddrinfo(ai); -} - -#else - -static void locate_host(const char *hostname, char **ip_address, - char **canon_hostname) -{ - struct hostent *hent; - struct sockaddr_in sa; - char **ap; - static char addrbuf[HOST_NAME_MAX + 1]; - - hent = gethostbyname(hostname); - - ap = hent->h_addr_list; - memset(&sa, 0, sizeof sa); - sa.sin_family = hent->h_addrtype; - sa.sin_port = htons(0); - memcpy(&sa.sin_addr, *ap, hent->h_length); - - inet_ntop(hent->h_addrtype, &sa.sin_addr, - addrbuf, sizeof(addrbuf)); - - free(*canon_hostname); - *canon_hostname = xstrdup(hent->h_name); - free(*ip_address); - *ip_address = xstrdup(addrbuf); -} - -#endif - /* * Read the host as supplied by the client connection. */ @@ -530,7 +472,7 @@ static void parse_host_arg(char *extra_args, int buflen) * if possible. */ if (hostname) - locate_host(hostname, &ip_address, &canon_hostname); + git_locate_host(hostname, &ip_address, &canon_hostname); } diff --git a/tcp.c b/tcp.c index 89f5c62..2cb90db 100644 --- a/tcp.c +++ b/tcp.c @@ -97,6 +97,34 @@ static const char *ai_name(const struct addrinfo *ai) return addr; } +void git_locate_host(const char *hostname, char **ip_address, + char **canon_hostname) +{ + struct addrinfo hints; + struct addrinfo *ai; + int gai; + static char addrbuf[HOST_NAME_MAX + 1]; + struct sockaddr_in *sin_addr; + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_CANONNAME; + + gai = getaddrinfo(hostname, NULL, &hints, &ai); + if (gai) + return; + + sin_addr = (void *)ai->ai_addr; + inet_ntop(AF_INET, &sin_addr->sin_addr, addrbuf, sizeof(addrbuf)); + free(*ip_address); + *ip_address = xstrdup(addrbuf); + + free(*canon_hostname); + *canon_hostname = xstrdup(ai->ai_canonname ? + ai->ai_canonname : *ip_address); + + freeaddrinfo(ai); +} + /* * Returns a connected socket() fd, or else die()s. */ @@ -162,6 +190,31 @@ static int git_tcp_connect_sock(char *host, int flags) #else /* NO_IPV6 */ +void git_locate_host(const char *hostname, char **ip_address, + char **canon_hostname) +{ + struct hostent *hent; + struct sockaddr_in sa; + char **ap; + static char addrbuf[HOST_NAME_MAX + 1]; + + hent = gethostbyname(hostname); + + ap = hent->h_addr_list; + memset(&sa, 0, sizeof sa); + sa.sin_family = hent->h_addrtype; + sa.sin_port = htons(0); + memcpy(&sa.sin_addr, *ap, hent->h_length); + + inet_ntop(hent->h_addrtype, &sa.sin_addr, + addrbuf, sizeof(addrbuf)); + + free(*canon_hostname); + *canon_hostname = xstrdup(hent->h_name); + free(*ip_address); + *ip_address = xstrdup(addrbuf); +} + /* * Returns a connected socket() fd, or else die()s. */ diff --git a/tcp.h b/tcp.h index 4de5f71..bed3cdc 100644 --- a/tcp.h +++ b/tcp.h @@ -1,6 +1,9 @@ #ifndef TCP_H #define TCP_H +extern void git_locate_host(const char *hostname, + char **ip_address, char **canon_hostname); + extern int git_use_proxy(const char *host); extern void git_tcp_connect(int fd[2], char *host, int flags); extern struct child_process *git_proxy_connect(int fd[2], char *host); -- 1.7.5.3 -- 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