Correct logic errors in bitmask_set and extend initial/increment size to reduce likelihood of any risk of realloc failure.

This commit is contained in:
counterpoint 2015-12-01 15:16:12 +00:00
parent 5410f08578
commit d054cb1595
2 changed files with 4 additions and 4 deletions

View File

@ -109,13 +109,13 @@ bitmask_set(GWBITMASK *bitmask, int bit)
unsigned char mask;
spinlock_acquire(&bitmask->lock);
if (bit >= bitmask->length)
while (bit >= bitmask->length)
{
bitmask->bits = realloc(bitmask->bits,
(bitmask->length + BIT_LENGTH_INC) / 8);
memset(bitmask->bits + (bitmask->length / 8), 0,
BIT_LENGTH_INC / 8);
bitmask->length += (BIT_LENGTH_INC / 8);
bitmask->length += BIT_LENGTH_INC;
}
ptr = bitmask->bits + (bit / 8);
mask = 1 << (bit % 8);

View File

@ -33,8 +33,8 @@
*/
/* Both these numbers MUST be exact multiples of 8 */
#define BIT_LENGTH_INITIAL 32 /**< Initial number of bits in the bitmask */
#define BIT_LENGTH_INC 32 /**< Number of bits to add on each increment */
#define BIT_LENGTH_INITIAL 256 /**< Initial number of bits in the bitmask */
#define BIT_LENGTH_INC 256 /**< Number of bits to add on each increment */
/**
* The bitmask structure used to store an arbitrary large bitmask