Commit 327fb51cec5393bd84b560ad7df5b85298f96e3c

Chris Young 2012-06-09T18:13:07

Fix gethostbyname compatibility

diff --git a/include/git2/common.h b/include/git2/common.h
index 045ba85..99018d4 100644
--- a/include/git2/common.h
+++ b/include/git2/common.h
@@ -56,11 +56,7 @@
 #endif
 
 #ifdef __amigaos4__
-/* Network byte order is big-endian... so is PPC, so these functions are NOP */
-#define htonl(x) x
-#define ntohl(x) x
-#define htons(x) x
-#define ntohs(x) x
+#include <netinet/in.h>
 #endif
 
 /**
diff --git a/src/netops.c b/src/netops.c
index fdbd965..6808c8e 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;