We already had bounds checking for the 2nd and subsequent 32 bit
blocks, but since the first block was handled separately (due to the
masking needed if it doesn't fall on a 32 bit boundary) it skipped
the check. With this change, any start bit >= the number of bits
in the array will return -1.
- bitArraySetAll() and bitArrayClrAll() set and clear the whole
array, with the size (in bytes) specified by the caller (to make
them work like bitArrayFindFirstSet())
- macros BITARRAY_SET_ALL() and BITARRAY_CLR_ALL() call those two
new functions using sizeof(array) as its size
When the first bit set is in the same 4-byte group that the start
(with start > 31), the returned index is off by the last multiple
of 32 <= start. This could cause unnecessary updates in the OSD
driver, since a non-dirty char would be actually updated while
it hadn't changed.
Rhe declaration has changed from void* to uint32_t*, which
is not a valid implicit conversion in C++.
Note to self: find out why there were not failing in travis builds,