aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-12-01 18:50:29 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-12-01 18:50:29 +0000
commita8cdd6459c598940919d79691d60c327dc365b37 (patch)
tree07aeace47350a6f3decb56b49bbc30669f54ce5b /src
parentc0f3fdfb994a708232bc134ade3f24314b68a674 (diff)
downloadpostgresql-a8cdd6459c598940919d79691d60c327dc365b37.tar.gz
postgresql-a8cdd6459c598940919d79691d60c327dc365b37.zip
netmask() and hostmask() functions should return maximum-length masklen,
per gripe from Joe Sunday.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/network.c22
1 files changed, 5 insertions, 17 deletions
diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c
index 8d9ea266434..496a8bf60e2 100644
--- a/src/backend/utils/adt/network.c
+++ b/src/backend/utils/adt/network.c
@@ -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))