Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Jul 2017 10:18:57 +0200
From:      Sebastian Huber <sebastian.huber@embedded-brains.de>
To:        freebsd-hackers@freebsd.org
Cc:        kib@freebsd.org
Subject:   [PATCH] bitset(9): Fix BIT_FLS()
Message-ID:  <20170711081857.8059-1-sebastian.huber@embedded-brains.de>

next in thread | raw e-mail | index | archive | help
Its embarrassing, but I got the loop wrong.  The iteration index is
unsigned, so testing for larger than or equal to zero makes little
sense.
---
 sys/sys/bitset.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/sys/sys/bitset.h b/sys/sys/bitset.h
index 1ed19531b3b..566d9448420 100644
--- a/sys/sys/bitset.h
+++ b/sys/sys/bitset.h
@@ -218,10 +218,10 @@
 	int __bit;							\
 									\
 	__bit = 0;							\
-	for (__i = __bitset_words((_s)) - 1; __i >= 0; __i--) {		\
-		if ((p)->__bits[__i] != 0) {				\
-			__bit = flsl((p)->__bits[__i]);			\
-			__bit += __i * _BITSET_BITS;			\
+	for (__i = __bitset_words((_s)); __i > 0; __i--) {		\
+		if ((p)->__bits[__i - 1] != 0) {			\
+			__bit = flsl((p)->__bits[__i - 1]);		\
+			__bit += (__i - 1) * _BITSET_BITS;		\
 			break;						\
 		}							\
 	}								\
-- 
2.12.3




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170711081857.8059-1-sebastian.huber>