Mercurial > dovecot > core-2.2
diff src/lib/network.c @ 4699:9e4cc68b71b2 HEAD
Fix net_ipv6_mapped_ipv4_convert() to be actually portable.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 16 Oct 2006 02:11:12 +0300 |
parents | 4f1df4b90500 |
children | 7ee0bb1b2d97 |
line wrap: on
line diff
--- a/src/lib/network.c Mon Oct 16 01:47:50 2006 +0300 +++ b/src/lib/network.c Mon Oct 16 02:11:12 2006 +0300 @@ -574,15 +574,16 @@ struct ip_addr *dest) { #ifdef HAVE_IPV6 + static uint8_t v4_prefix[] = + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; + if (!IPADDR_IS_V6(src)) return -1; - if (src->ip.in6_u.u6_addr32[0] != 0 || - src->ip.in6_u.u6_addr32[1] != 0 || - src->ip.in6_u.u6_addr32[2] != 0xffff0000) + if (memcmp(src->ip.s6_addr, v4_prefix, sizeof(v4_prefix)) != 0) return -1; dest->family = AF_INET; - memcpy(&dest->ip, &src->ip.in6_u.u6_addr32[3], 4); + memcpy(&dest->ip, &src->ip.s6_addr[3*4], 4); return 0; #else return -1;