[bitmap] Fix bitmaps on 64-bit platforms
authorGeoff Lywood <glywood@vmware.com>
Tue, 4 May 2010 21:18:04 +0000 (14:18 -0700)
committerJoshua Oreman <oremanj@rwcr.net>
Thu, 27 May 2010 00:56:32 +0000 (17:56 -0700)
Fix mistaken truncation of bitmap blocks to integer size before
testing and comparison. A typical symptom of the error would be
TFTP transfers failing after 32 blocks.

Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
src/core/bitmap.c
src/include/gpxe/bitmap.h

index bbe9cba..cd8dd2d 100644 (file)
@@ -76,7 +76,7 @@ int bitmap_test ( struct bitmap *bitmap, unsigned int bit ) {
 
        if ( bit >= bitmap->length )
                return 0;
-       return ( bitmap->blocks[index] & mask );
+       return ( bitmap->blocks[index] & mask ) != 0;
 }
 
 /**
index d6911a5..7b43038 100644 (file)
@@ -33,7 +33,7 @@ typedef unsigned long bitmap_block_t;
  * @v bit              Bit index
  * @ret mask           Block mask
  */
-#define BITMAP_MASK( bit ) ( 1 << ( (bit) % BITMAP_BLKSIZE ) )
+#define BITMAP_MASK( bit ) ( (bitmap_block_t)1 << ( (bit) % BITMAP_BLKSIZE ) )
 
 /** A bitmap */
 struct bitmap {