# HG changeset patch # User Eion Robb # Date 1323789856 0 # Node ID c0c60e110c82553ab4634ce510a138f6b868a4e3 # Parent 7967bb7db1919607c075195d4fb75479a4d6f361 Fix the compilation of the Bonjour prpl on Windows. Fixes #14802 committer: Daniel Atallah diff -r 7967bb7db191 -r c0c60e110c82 libpurple/protocols/bonjour/jabber.c --- a/libpurple/protocols/bonjour/jabber.c Tue Dec 06 08:23:45 2011 +0000 +++ b/libpurple/protocols/bonjour/jabber.c Tue Dec 13 15:24:16 2011 +0000 @@ -1448,7 +1448,7 @@ } void -append_iface_if_linklocal(char *ip, uint32_t interface) { +append_iface_if_linklocal(char *ip, guint32 interface_param) { struct in6_addr in6_addr; int len_remain = INET6_ADDRSTRLEN - strlen(ip); @@ -1460,5 +1460,5 @@ return; snprintf(ip + strlen(ip), len_remain, "%%%d", - interface); + interface_param); } diff -r 7967bb7db191 -r c0c60e110c82 libpurple/protocols/bonjour/jabber.h --- a/libpurple/protocols/bonjour/jabber.h Tue Dec 06 08:23:45 2011 +0000 +++ b/libpurple/protocols/bonjour/jabber.h Tue Dec 13 15:24:16 2011 +0000 @@ -111,6 +111,6 @@ int xep_iq_send_and_free(XepIq *iq); GSList * bonjour_jabber_get_local_ips(int fd); -void append_iface_if_linklocal(char *ip, uint32_t interface); +void append_iface_if_linklocal(char *ip, guint32 interface_param); #endif /* _BONJOUR_JABBER_H_ */ diff -r 7967bb7db191 -r c0c60e110c82 libpurple/win32/libc_interface.c --- a/libpurple/win32/libc_interface.c Tue Dec 06 08:23:45 2011 +0000 +++ b/libpurple/win32/libc_interface.c Tue Dec 13 15:24:16 2011 +0000 @@ -300,6 +300,50 @@ return (const char *) dst; } +int +wpurple_inet_pton(int af, const char *src, void *dst) +{ + /* struct sockaddr can't accomodate struct sockaddr_in6. */ + 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; +} + /* netdb.h */ struct hostent* wpurple_gethostbyname(const char *name) { diff -r 7967bb7db191 -r c0c60e110c82 libpurple/win32/libc_interface.h --- a/libpurple/win32/libc_interface.h Tue Dec 06 08:23:45 2011 +0000 +++ b/libpurple/win32/libc_interface.h Tue Dec 13 15:24:16 2011 +0000 @@ -89,6 +89,9 @@ #define inet_ntop( af, src, dst, cnt ) \ wpurple_inet_ntop( af, src, dst, cnt ) +#define inet_pton( af, src, dst ) \ +wpurple_inet_pton( af, src, dst ) + /* netdb.h */ #define gethostbyname( name ) \ wpurple_gethostbyname( name ) diff -r 7967bb7db191 -r c0c60e110c82 libpurple/win32/libc_internal.h --- a/libpurple/win32/libc_internal.h Tue Dec 06 08:23:45 2011 +0000 +++ b/libpurple/win32/libc_internal.h Tue Dec 13 15:24:16 2011 +0000 @@ -48,6 +48,7 @@ int wpurple_inet_aton(const char *name, struct in_addr *addr); const char * wpurple_inet_ntop (int af, const void *src, char *dst, socklen_t cnt); +int wpurple_inet_pton(int af, const char *src, void *dst); /* netdb.h */ struct hostent* wpurple_gethostbyname(const char *name);