Commit dabc3f31 authored by Bruce Momjian's avatar Bruce Momjian

Fix for netmask('x.x.x.x/0') is 255.255.255.255 instead of 0.0.0.0

This is because (-1) << 32 is -1 (Only intel arc. has been checked)

Oleg Sharoiko
parent 337ab803
...@@ -48,6 +48,7 @@ PARSER ...@@ -48,6 +48,7 @@ PARSER
* redesign INSERT ... SELECT to have two levels of target list * redesign INSERT ... SELECT to have two levels of target list
* -select * from pg_class where oid in (0,-1) * -select * from pg_class where oid in (0,-1)
* have INTERSECT/EXCEPT prevent duplicates unless ALL is specified * have INTERSECT/EXCEPT prevent duplicates unless ALL is specified
* prevent primary key of nine columns(see TODO.detail/primary)
VIEWS VIEWS
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* is for IP V4 CIDR notation, but prepared for V6: just * is for IP V4 CIDR notation, but prepared for V6: just
* add the necessary bits where the comments indicate. * add the necessary bits where the comments indicate.
* *
* $Id: network.c,v 1.15 1999/07/17 20:17:58 momjian Exp $ * $Id: network.c,v 1.16 1999/09/23 17:42:23 momjian Exp $
* Jon Postel RIP 16 Oct 1998 * Jon Postel RIP 16 Oct 1998
*/ */
...@@ -448,7 +448,8 @@ network_netmask(inet *ip) ...@@ -448,7 +448,8 @@ network_netmask(inet *ip)
if (ip_family(ip) == AF_INET) if (ip_family(ip) == AF_INET)
{ {
/* It's an IP V4 address: */ /* It's an IP V4 address: */
int addr = htonl((-1 << (32 - ip_bits(ip))) & 0xffffffff); int addr = htonl(ip_bits(ip) ?
(-1 << (32 - ip_bits(ip))) & 0xffffffff : 0x00000000);
if (inet_net_ntop(AF_INET, &addr, 32, tmp, sizeof(tmp)) == NULL) if (inet_net_ntop(AF_INET, &addr, 32, tmp, sizeof(tmp)) == NULL)
elog(ERROR, "unable to print netmask (%s)", strerror(errno)); elog(ERROR, "unable to print netmask (%s)", strerror(errno));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment