]> granicus.if.org Git - postgresql/commitdiff
netmask() and hostmask() functions should return maximum-length masklen,
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Dec 2003 18:50:29 +0000 (18:50 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Dec 2003 18:50:29 +0000 (18:50 +0000)
per gripe from Joe Sunday.

src/backend/utils/adt/network.c

index 8d9ea2664342dec219b8f2bef0cf1f993d652963..496a8bf60e29f45c6d1f44d16089df213b468943 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     PostgreSQL type definitions for the INET and CIDR types.
  *
- *     $Header: /cvsroot/pgsql/src/backend/utils/adt/network.c,v 1.47 2003/09/29 00:05:25 petere Exp $
+ *     $Header: /cvsroot/pgsql/src/backend/utils/adt/network.c,v 1.47.2.1 2003/12/01 18:50:29 tgl Exp $
  *
  *     Jon Postel RIP 16 Oct 1998
  */
@@ -315,8 +315,8 @@ inet_set_masklen(PG_FUNCTION_ARGS)
                                 errmsg("invalid mask length: %d", bits)));
 
        /* clone the original data */
-       dst = (inet *) palloc(VARHDRSZ + sizeof(inet_struct));
-       memcpy(dst, src, VARHDRSZ + sizeof(inet_struct));
+       dst = (inet *) palloc(VARSIZE(src));
+       memcpy(dst, src, VARSIZE(src));
 
        ip_bits(dst) = bits;
 
@@ -658,7 +658,6 @@ network_network(PG_FUNCTION_ARGS)
        inet       *dst;
        int                     byte;
        int                     bits;
-       int                     maxbytes;
        unsigned char mask;
        unsigned char *a,
                           *b;
@@ -666,11 +665,6 @@ network_network(PG_FUNCTION_ARGS)
        /* make sure any unused bits are zeroed */
        dst = (inet *) palloc0(VARHDRSZ + sizeof(inet_struct));
 
-       if (ip_family(ip) == PGSQL_AF_INET)
-               maxbytes = 4;
-       else
-               maxbytes = 16;
-
        bits = ip_bits(ip);
        a = ip_addr(ip);
        b = ip_addr(dst);
@@ -710,18 +704,12 @@ network_netmask(PG_FUNCTION_ARGS)
        inet       *dst;
        int                     byte;
        int                     bits;
-       int                     maxbytes;
        unsigned char mask;
        unsigned char *b;
 
        /* make sure any unused bits are zeroed */
        dst = (inet *) palloc0(VARHDRSZ + sizeof(inet_struct));
 
-       if (ip_family(ip) == PGSQL_AF_INET)
-               maxbytes = 4;
-       else
-               maxbytes = 16;
-
        bits = ip_bits(ip);
        b = ip_addr(dst);
 
@@ -744,7 +732,7 @@ network_netmask(PG_FUNCTION_ARGS)
        }
 
        ip_family(dst) = ip_family(ip);
-       ip_bits(dst) = ip_bits(ip);
+       ip_bits(dst) = ip_maxbits(ip);
        ip_type(dst) = 0;
        VARATT_SIZEP(dst) = VARHDRSZ
                + ((char *) ip_addr(dst) - (char *) VARDATA(dst))
@@ -794,7 +782,7 @@ network_hostmask(PG_FUNCTION_ARGS)
        }
 
        ip_family(dst) = ip_family(ip);
-       ip_bits(dst) = ip_bits(ip);
+       ip_bits(dst) = ip_maxbits(ip);
        ip_type(dst) = 0;
        VARATT_SIZEP(dst) = VARHDRSZ
                + ((char *) ip_addr(dst) - (char *) VARDATA(dst))