netmask() and hostmask() functions should return maximum-length masklen,

per gripe from Joe Sunday.
This commit is contained in:
Tom Lane 2003-12-01 18:50:19 +00:00
parent 3e5da0a8da
commit c5336a892f

View File

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