summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hostmask.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/hostmask.c b/src/hostmask.c
index 5c34013..c82a88c 100644
--- a/src/hostmask.c
+++ b/src/hostmask.c
@@ -335,15 +335,12 @@ mask_addr(struct irc_ssaddr *ip, int bits)
#ifdef IPV6
else
{
- n = bits / 8;
- m = bits % 8;
- v6_base_ip = (struct sockaddr_in6 *)ip;
-
- mask = ~((1 << (8 - m)) -1 );
- v6_base_ip->sin6_addr.s6_addr[n] = v6_base_ip->sin6_addr.s6_addr[n] & mask;
+ uint32_t tmp = 0;
+ v4_base_ip = (struct sockaddr_in *)ip;
- for (i = n + 1; i < 16; i++)
- v6_base_ip->sin6_addr.s6_addr[i] = 0;
+ mask = ~((1 << (32 - bits)) - 1);
+ tmp = ntohl(v4_base_ip->sin_addr.s_addr);
+ v4_base_ip->sin_addr.s_addr = htonl(tmp & mask);
}
#endif
}