Fix IP6 work for FreeBSD/Mac.

This commit is contained in:
Ian Osgood 2006-11-21 09:04:37 -08:00
parent 684b8271a4
commit 7fbfebaa3f

View File

@ -77,6 +77,8 @@ static int authname_match(enum auth_protos kind, char *name, int namelen)
return 1; return 1;
} }
#define SIN6_ADDR(s) (&((struct sockaddr_in6 *)s)->sin6_addr)
static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen, static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen,
int display) int display)
{ {
@ -92,11 +94,11 @@ static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen,
switch(sockname->sa_family) switch(sockname->sa_family)
{ {
case AF_INET6: case AF_INET6:
addr = (char *) &((struct sockaddr_in6 *)sockname)->sin6_addr; addr = (char *) SIN6_ADDR(sockname);
addrlen = sizeof(((struct sockaddr_in6 *)sockname)->sin6_addr); addrlen = sizeof(*SIN6_ADDR(sockname));
if(!IN6_IS_ADDR_V4MAPPED(addr)) if(!IN6_IS_ADDR_V4MAPPED(SIN6_ADDR(sockname)))
{ {
if(!IN6_IS_ADDR_LOOPBACK(addr)) if(!IN6_IS_ADDR_LOOPBACK(SIN6_ADDR(sockname)))
family = XCB_FAMILY_INTERNET_6; family = XCB_FAMILY_INTERNET_6;
break; break;
} }
@ -180,7 +182,7 @@ static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr *
case AF_INET6: case AF_INET6:
/*block*/ { /*block*/ {
struct sockaddr_in6 *si6 = (struct sockaddr_in6 *) sockname; struct sockaddr_in6 *si6 = (struct sockaddr_in6 *) sockname;
if(IN6_IS_ADDR_V4MAPPED(si6->sin6_addr.s6_addr)) if(IN6_IS_ADDR_V4MAPPED(SIN6_ADDR(sockname)))
{ {
APPEND(info->data, j, si6->sin6_addr.s6_addr[12]); APPEND(info->data, j, si6->sin6_addr.s6_addr[12]);
APPEND(info->data, j, si6->sin6_port); APPEND(info->data, j, si6->sin6_port);