From 394356f73c026879672843fbb20b4de68a09d0ac Mon Sep 17 00:00:00 2001 From: Sascha Steinbiss Date: Wed, 27 Apr 2022 20:09:50 +0200 Subject: [PATCH] detect: make int CIDRFromMask() work on big endian platforms --- src/util-cidr.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/util-cidr.c b/src/util-cidr.c index 06a0c30bc2..bdab3063c2 100644 --- a/src/util-cidr.c +++ b/src/util-cidr.c @@ -31,25 +31,24 @@ */ int CIDRFromMask(uint32_t netmask) { + netmask = ntohl(netmask); if (netmask == 0) { return 0; } - int lead_1 = 0; - bool seen_0 = false; - for (int i = 0; i < 32; i++) { - if (!seen_0) { - if ((netmask & BIT_U32(i)) != 0) { - lead_1++; - } else { - seen_0 = true; - } + int p = 0; + bool seen_1 = false; + while (netmask > 0) { + if (netmask & 1) { + seen_1 = true; + p++; } else { - if ((netmask & BIT_U32(i)) != 0) { + if (seen_1) { return -1; } } + netmask >>= 1; } - return lead_1; + return p; } uint32_t CIDRGet(int cidr) -- 2.47.2