fix for shifting prefix bits

This commit is contained in:
Aleksandar Fabijanic
2012-07-31 03:50:28 +00:00
parent 219a945cc9
commit d1a1d54f58
2 changed files with 32 additions and 7 deletions

View File

@@ -149,7 +149,7 @@ public:
IPv4AddressImpl(unsigned prefix)
{
UInt32 addr = ~(0xffffffff >> prefix);
UInt32 addr = (prefix == 32) ? 0xffffffff : ~(0xffffffff >> prefix);
_addr.s_addr = htonl(addr);
}
@@ -383,15 +383,15 @@ public:
{
unsigned i = 0;
#ifdef POCO_OS_FAMILY_WINDOWS
for (; prefix > 16; ++i, prefix -= 16) {
for (; prefix >= 16; ++i, prefix -= 16) {
_addr.s6_addr16[i] = 0xffff;
}
if (prefix > 0)
_addr.s6_addr16[i++] = htons(~(0xffffU >> prefix));
_addr.s6_addr16[i++] = htons(~(0xffff >> prefix));
while (i < 8)
_addr.s6_addr16[i++] = 0;
#else
for (; prefix > 32; ++i, prefix -= 32) {
for (; prefix >= 32; ++i, prefix -= 32) {
_addr.s6_addr32[i] = 0xffffffff;
}
if (prefix > 0)