From: Timo Sirainen Date: Sat, 20 Feb 2010 14:19:19 +0000 (+0200) Subject: liblib: Added net_ip_cmp(). X-Git-Tag: 2.0.beta3~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=64c60507e1af93217c4e1d57960314b2808be579;p=thirdparty%2Fdovecot%2Fcore.git liblib: Added net_ip_cmp(). --HG-- branch : HEAD --- diff --git a/src/lib/network.c b/src/lib/network.c index 9faf3a4238..adf9d55751 100644 --- a/src/lib/network.c +++ b/src/lib/network.c @@ -29,18 +29,21 @@ union sockaddr_union { #endif bool net_ip_compare(const struct ip_addr *ip1, const struct ip_addr *ip2) +{ + return net_ip_cmp(ip1, ip2) == 0; +} + +int net_ip_cmp(const struct ip_addr *ip1, const struct ip_addr *ip2) { if (ip1->family != ip2->family) - return 0; + return ip1->family - ip2->family; #ifdef HAVE_IPV6 - if (ip1->family == AF_INET6) { - return memcmp(&ip1->u.ip6, &ip2->u.ip6, - sizeof(ip1->u.ip6)) == 0; - } + if (ip1->family == AF_INET6) + return memcmp(&ip1->u.ip6, &ip2->u.ip6, sizeof(ip1->u.ip6)); #endif - return memcmp(&ip1->u.ip4, &ip2->u.ip4, sizeof(ip1->u.ip4)) == 0; + return memcmp(&ip1->u.ip4, &ip2->u.ip4, sizeof(ip1->u.ip4)); } unsigned int net_ip_hash(const struct ip_addr *ip) diff --git a/src/lib/network.h b/src/lib/network.h index 4cb6abdecd..45f8e89310 100644 --- a/src/lib/network.h +++ b/src/lib/network.h @@ -40,8 +40,10 @@ struct ip_addr { #define IPADDR_IS_V4(ip) ((ip)->family == AF_INET) #define IPADDR_IS_V6(ip) ((ip)->family == AF_INET6) -/* returns 1 if IPADDRs are the same */ +/* Returns TRUE if IPs are the same */ bool net_ip_compare(const struct ip_addr *ip1, const struct ip_addr *ip2); +/* Returns 0 if IPs are the same, -1 or 1 otherwise. */ +int net_ip_cmp(const struct ip_addr *ip1, const struct ip_addr *ip2); unsigned int net_ip_hash(const struct ip_addr *ip); /* Connect to socket with ip address */