diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-06-09 18:13:07 +0100 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-06-09 18:13:07 +0100 |
commit | 327fb51cec5393bd84b560ad7df5b85298f96e3c (patch) | |
tree | 722aeac2e1db27a4b5e032988b2000a724751d20 /src | |
parent | b9bfc7684b94bf052203034cbddfdf01e26205e5 (diff) | |
download | libgit2-327fb51cec5393bd84b560ad7df5b85298f96e3c.tar.gz |
Fix gethostbyname compatibility
Diffstat (limited to 'src')
-rw-r--r-- | src/netops.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/netops.c b/src/netops.c index fdbd965b..6808c8ee 100644 --- a/src/netops.c +++ b/src/netops.c @@ -382,7 +382,9 @@ int gitno_connect(git_transport *t, const char *host, const char *port) #else int p; struct hostent *hent; + struct servent *sent; struct sockaddr_in saddr; + long port_num = 0; #endif int ret; GIT_SOCKET s = INVALID_SOCKET; @@ -397,6 +399,12 @@ int gitno_connect(git_transport *t, const char *host, const char *port) } #else hent = gethostbyname(host); + sent = getservbyname(port, 0); + + if(sent) + port_num = sent->s_port; + else + port_num = atol(port); #endif #ifndef __amigaos4__ @@ -413,9 +421,9 @@ int gitno_connect(git_transport *t, const char *host, const char *port) #ifndef __amigaos4__ if (connect(s, p->ai_addr, (socklen_t)p->ai_addrlen) == 0) #else - saddr.sin_addr.s_addr = *hent->h_addr_list[p]; + memcpy(&saddr.sin_addr, hent->h_addr_list[p], hent->h_length); saddr.sin_family = hent->h_addrtype; - saddr.sin_port = port; + saddr.sin_port = port_num; if (connect(s, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in)) == 0) #endif break; |