summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Straub <bs@github.com>2012-11-07 12:58:54 -0800
committerBen Straub <bs@github.com>2012-11-07 12:58:54 -0800
commit721571cc5ebc842b2a95a4b652362a3a23e98ca3 (patch)
tree489bcfa38bf8d4365d5dc8c77ca8acecbe739a7b
parent8a85378829cb3bd417b04cd690da8d7d470b6214 (diff)
parent345eef23741b98636ab7ac3b1a12fa5178d5912b (diff)
downloadlibgit2-721571cc5ebc842b2a95a4b652362a3a23e98ca3.tar.gz
Merge pull request #1050 from edubart/development
Fix compilation for mingw32 and cygwin
-rw-r--r--src/netops.c4
-rw-r--r--src/posix.c2
-rw-r--r--src/unix/posix.h1
-rw-r--r--src/win32/posix.h1
-rw-r--r--src/win32/posix_w32.c44
5 files changed, 49 insertions, 3 deletions
diff --git a/src/netops.c b/src/netops.c
index 3e2743486..fa4a729bd 100644
--- a/src/netops.c
+++ b/src/netops.c
@@ -274,11 +274,11 @@ static int verify_server_cert(gitno_ssl *ssl, const char *host)
}
/* Try to parse the host as an IP address to see if it is */
- if (inet_pton(AF_INET, host, &addr4)) {
+ if (p_inet_pton(AF_INET, host, &addr4)) {
type = GEN_IPADD;
addr = &addr4;
} else {
- if(inet_pton(AF_INET6, host, &addr6)) {
+ if(p_inet_pton(AF_INET6, host, &addr6)) {
type = GEN_IPADD;
addr = &addr6;
}
diff --git a/src/posix.c b/src/posix.c
index 985221dd5..d207ce1a0 100644
--- a/src/posix.c
+++ b/src/posix.c
@@ -205,3 +205,5 @@ int p_write(git_file fd, const void *buf, size_t cnt)
}
return 0;
}
+
+
diff --git a/src/unix/posix.h b/src/unix/posix.h
index bcd800301..f6f2e2353 100644
--- a/src/unix/posix.h
+++ b/src/unix/posix.h
@@ -21,5 +21,6 @@
#define p_snprintf(b, c, f, ...) snprintf(b, c, f, __VA_ARGS__)
#define p_mkstemp(p) mkstemp(p)
#define p_setenv(n,v,o) setenv(n,v,o)
+#define p_inet_pton(a, b, c) inet_pton(a, b, c)
#endif
diff --git a/src/win32/posix.h b/src/win32/posix.h
index 80dcca5c1..d99864d05 100644
--- a/src/win32/posix.h
+++ b/src/win32/posix.h
@@ -48,5 +48,6 @@ extern int p_getcwd(char *buffer_out, size_t size);
extern int p_rename(const char *from, const char *to);
extern int p_recv(GIT_SOCKET socket, void *buffer, size_t length, int flags);
extern int p_send(GIT_SOCKET socket, const void *buffer, size_t length, int flags);
+extern int p_inet_pton(int af, const char* src, void* dst);
#endif
diff --git a/src/win32/posix_w32.c b/src/win32/posix_w32.c
index 649fe9b95..557f4f3bf 100644
--- a/src/win32/posix_w32.c
+++ b/src/win32/posix_w32.c
@@ -11,7 +11,7 @@
#include <errno.h>
#include <io.h>
#include <fcntl.h>
-
+#include <ws2tcpip.h>
int p_unlink(const char *path)
{
@@ -504,3 +504,45 @@ int p_gettimeofday(struct timeval *tv, struct timezone *tz)
return 0;
}
+
+int p_inet_pton(int af, const char* src, void* dst)
+{
+ union {
+ struct sockaddr_in6 sin6;
+ struct sockaddr_in sin;
+ } sa;
+ size_t srcsize;
+
+ switch(af)
+ {
+ case AF_INET:
+ sa.sin.sin_family = AF_INET;
+ srcsize = sizeof (sa.sin);
+ break;
+ case AF_INET6:
+ sa.sin6.sin6_family = AF_INET6;
+ srcsize = sizeof (sa.sin6);
+ break;
+ default:
+ errno = WSAEPFNOSUPPORT;
+ return -1;
+ }
+
+ if (WSAStringToAddress(src, af, NULL, (struct sockaddr *) &sa, &srcsize) != 0)
+ {
+ errno = WSAGetLastError();
+ return -1;
+ }
+
+ switch(af)
+ {
+ case AF_INET:
+ memcpy(dst, &sa.sin.sin_addr, sizeof(sa.sin.sin_addr));
+ break;
+ case AF_INET6:
+ memcpy(dst, &sa.sin6.sin6_addr, sizeof(sa.sin6.sin6_addr));
+ break;
+ }
+
+ return 1;
+}