33 *is for IP V4 CIDR notation, but prepared for V6: just
44 *add the necessary bits where the comments indicate.
55 *
6- *$Id: network.c,v 1.19 2000/03/07 23: 01:43 momjian Exp $
6+ *$Id: network.c,v 1.20 2000/03/08 01:44:37 momjian Exp $
77 *Jon Postel RIP 16 Oct 1998
88 */
99
1818#include "postgres.h"
1919#include "utils/builtins.h"
2020
21- static int v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits1 , int bits2 );
21+ static int v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits );
2222
2323/*
2424 *Access macros.Add IPV6 support.
@@ -137,7 +137,7 @@ network_lt(inet *a1, inet *a2)
137137return FALSE;
138138if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
139139{
140- int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ));
140+ int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ));
141141
142142return ((order < 0 )|| ((order == 0 )&& (ip_bits (a1 )< ip_bits (a2 ))));
143143}
@@ -166,7 +166,7 @@ network_eq(inet *a1, inet *a2)
166166if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
167167{
168168return ((ip_bits (a1 )== ip_bits (a2 ))
169- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ) )== 0 ));
169+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ))== 0 ));
170170}
171171else
172172{
@@ -192,7 +192,7 @@ network_gt(inet *a1, inet *a2)
192192return FALSE;
193193if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
194194{
195- int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ));
195+ int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ));
196196
197197return ((order > 0 )|| ((order == 0 )&& (ip_bits (a1 )> ip_bits (a2 ))));
198198}
@@ -222,7 +222,7 @@ network_sub(inet *a1, inet *a2)
222222if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
223223{
224224return ((ip_bits (a1 )> ip_bits (a2 ))
225- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ))== 0 ));
225+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ))== 0 ));
226226}
227227else
228228{
@@ -242,7 +242,7 @@ network_subeq(inet *a1, inet *a2)
242242if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
243243{
244244return ((ip_bits (a1 ) >=ip_bits (a2 ))
245- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ))== 0 ));
245+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ))== 0 ));
246246}
247247else
248248{
@@ -262,7 +262,7 @@ network_sup(inet *a1, inet *a2)
262262if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
263263{
264264return ((ip_bits (a1 )< ip_bits (a2 ))
265- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ) )== 0 ));
265+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ))== 0 ));
266266}
267267else
268268{
@@ -282,7 +282,7 @@ network_supeq(inet *a1, inet *a2)
282282if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
283283{
284284return ((ip_bits (a1 ) <=ip_bits (a2 ))
285- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ) )== 0 ));
285+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ))== 0 ));
286286}
287287else
288288{
@@ -476,16 +476,13 @@ network_netmask(inet *ip)
476476 */
477477
478478static int
479- v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits1 , int bits2 )
479+ v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits )
480480{
481481unsigned long mask = 0 ;
482- int i ,bits ;
483-
484- bits = (bits1 < bits2 ) ?bits1 :bits2 ;
482+ int i ;
485483
486484for (i = 0 ;i < bits ;i ++ )
487485mask = (mask >>1 ) |0x80000000 ;
488-
489486a1 = ntohl (a1 );
490487a2 = ntohl (a2 );
491488if ((a1 & mask )< (a2 & mask ))