detect: make int CIDRFromMask() work on big endian platforms

pull/7349/head
Sascha Steinbiss 4 years ago committed by Victor Julien
parent d2f00ac824
commit 394356f73c

@ -31,25 +31,24 @@
*/ */
int CIDRFromMask(uint32_t netmask) int CIDRFromMask(uint32_t netmask)
{ {
netmask = ntohl(netmask);
if (netmask == 0) { if (netmask == 0) {
return 0; return 0;
} }
int lead_1 = 0; int p = 0;
bool seen_0 = false; bool seen_1 = false;
for (int i = 0; i < 32; i++) { while (netmask > 0) {
if (!seen_0) { if (netmask & 1) {
if ((netmask & BIT_U32(i)) != 0) { seen_1 = true;
lead_1++; p++;
} else {
seen_0 = true;
}
} else { } else {
if ((netmask & BIT_U32(i)) != 0) { if (seen_1) {
return -1; return -1;
} }
} }
netmask >>= 1;
} }
return lead_1; return p;
} }
uint32_t CIDRGet(int cidr) uint32_t CIDRGet(int cidr)

Loading…
Cancel
Save