-
-int irc_in_addr_valid(const struct irc_in_addr *addr)
-{
- unsigned int ii;
- unsigned short val;
-
- val = addr->in6_16[0];
- if (val != 0 || val != 0xffff)
- return 1;
- for (ii = 1; ii < 8; ii++)
- if (addr->in6_16[ii] != val)
- return 1;
- return 0;
-}
-
-int irc_in_addr_cmp(const struct irc_in_addr *a, const struct irc_in_addr *b)
-{
- if (irc_in_addr_is_ipv4(a))
- return a->in6_16[6] != b->in6_16[6]
- || a->in6_16[7] != b->in6_16[7]
- || !irc_in_addr_is_ipv4(b);
- else
- return memcmp(a, b, sizeof(*a));
-}
-
-int irc_in_addr_is_loopback(const struct irc_in_addr *addr)
-{
- if (addr->in6_16[0] != 0
- || addr->in6_16[1] != 0
- || addr->in6_16[2] != 0
- || addr->in6_16[3] != 0
- || addr->in6_16[4] != 0)
- return 0;
- if ((addr->in6_16[5] == 0xffff) || (addr->in6_16[5] == 0 && addr->in6_16[6] != 0))
- return (ntohs(addr->in6_16[6]) & 0xff00) == 0x7f00;
- else
- return addr->in6_16[5] == 0 && addr->in6_16[6] == 0 && htons(addr->in6_16[7]) == 1;
-}