diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/bitmap.c | 11 | ||||
| -rw-r--r-- | src/lib/tests/bitmap_test.c | 15 | 
2 files changed, 18 insertions, 8 deletions
| diff --git a/src/lib/bitmap.c b/src/lib/bitmap.c index bf9bb99d..ec663ec7 100644 --- a/src/lib/bitmap.c +++ b/src/lib/bitmap.c @@ -50,7 +50,7 @@ static size_t find_next_zero_bit(const size_t * addr,          tmp = ~addr[start];          while (!tmp) {                  start++; -                if (start >= (nbits / BITS_PER_LONG)) +                if (start >= DIV_ROUND_UP(nbits, BITS_PER_LONG))                          return nbits;                  tmp = ~addr[start]; @@ -69,8 +69,7 @@ static size_t find_next_zero_bit(const size_t * addr,  static void bitmap_zero(size_t * dst,                          size_t   nbits)  { -        size_t len = BITS_TO_LONGS(nbits) * sizeof(size_t); -        memset(dst, 0, len); +        memset(dst, 0, BITS_TO_LONGS(nbits) * sizeof(size_t));  }  static void bitmap_clear(size_t * map, @@ -92,8 +91,8 @@ static void bitmap_set(size_t * map,  }  struct bmp { -        ssize_t offset; -        size_t size; +        ssize_t  offset; +        size_t   size;          size_t * bitmap;  }; @@ -116,7 +115,7 @@ struct bmp * bmp_create(size_t  bits,                  return NULL;          } -        tmp->size = bits; +        tmp->size   = bits;          tmp->offset = offset;          bitmap_zero(tmp->bitmap, bits); diff --git a/src/lib/tests/bitmap_test.c b/src/lib/tests/bitmap_test.c index e438f217..4f58de3b 100644 --- a/src/lib/tests/bitmap_test.c +++ b/src/lib/tests/bitmap_test.c @@ -30,7 +30,7 @@  int bitmap_test(int argc, char ** argv)  {          struct bmp * bmp; -        size_t bits = BITMAP_SIZE; +        ssize_t bits = BITMAP_SIZE;          ssize_t id;          int i;          ssize_t r; @@ -57,8 +57,19 @@ int bitmap_test(int argc, char ** argv)          for (i = offset; i < BITMAP_SIZE + 5 + offset; i++) {                  id = bmp_allocate(bmp); -                if (!bmp_is_id_valid(bmp, id)) +                if (!bmp_is_id_valid(bmp, id)) { +                        if (i < BITMAP_SIZE + offset) { +                                printf("Failed valid ID %d (%zd).\n", i, id); +                                bmp_destroy(bmp); +                                return -1; +                        } +                        if (id >= offset && id < bits + offset) { +                                printf("Valid ID %zd returned invalid.\n", id); +                                bmp_destroy(bmp); +                                return -1; +                        }                          continue; +                }                  if (!bmp_is_id_used(bmp, id)) {                          printf("ID not marked in use.\n"); | 
