mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 00:30:27 +00:00
Move inet_pton to posix platform-compatibility layer
This commit is contained in:
parent
d1a69d0fff
commit
345eef2374
52
src/netops.c
52
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 (gitno_inet_pton(AF_INET, host, &addr4)) {
|
||||
if (p_inet_pton(AF_INET, host, &addr4)) {
|
||||
type = GEN_IPADD;
|
||||
addr = &addr4;
|
||||
} else {
|
||||
if(gitno_inet_pton(AF_INET6, host, &addr6)) {
|
||||
if(p_inet_pton(AF_INET6, host, &addr6)) {
|
||||
type = GEN_IPADD;
|
||||
addr = &addr6;
|
||||
}
|
||||
@ -597,51 +597,3 @@ int gitno_extract_host_and_port(char **host, char **port, const char *url, const
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int gitno_inet_pton(int af, const char* src, void* dst)
|
||||
{
|
||||
/* inet_pton is only available in Windows Vista or later
|
||||
* mingw32 and cygwin give compile errors */
|
||||
#ifndef GIT_WIN32
|
||||
return inet_pton(af, src, dst);
|
||||
#else
|
||||
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;
|
||||
#endif
|
||||
}
|
||||
|
@ -67,6 +67,5 @@ int gitno_close(gitno_socket *s);
|
||||
int gitno_select_in(gitno_buffer *buf, long int sec, long int usec);
|
||||
|
||||
int gitno_extract_host_and_port(char **host, char **port, const char *url, const char *default_port);
|
||||
int gitno_inet_pton(int af, const char *src, void *dst);
|
||||
|
||||
#endif
|
||||
|
@ -205,3 +205,5 @@ int p_write(git_file fd, const void *buf, size_t cnt)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user