mirror of https://github.com/ipxe/ipxe.git
Reallocate memory for bitmaps only when necessary.
parent
423e9d72f3
commit
1de705e30f
|
@ -41,14 +41,16 @@ int bitmap_resize ( struct bitmap *bitmap, unsigned int new_length ) {
|
||||||
old_num_blocks = BITMAP_INDEX ( bitmap->length + BITMAP_BLKSIZE - 1 );
|
old_num_blocks = BITMAP_INDEX ( bitmap->length + BITMAP_BLKSIZE - 1 );
|
||||||
new_num_blocks = BITMAP_INDEX ( new_length + BITMAP_BLKSIZE - 1 );
|
new_num_blocks = BITMAP_INDEX ( new_length + BITMAP_BLKSIZE - 1 );
|
||||||
|
|
||||||
|
if ( old_num_blocks != new_num_blocks ) {
|
||||||
new_size = ( new_num_blocks * sizeof ( bitmap->blocks[0] ) );
|
new_size = ( new_num_blocks * sizeof ( bitmap->blocks[0] ) );
|
||||||
new_blocks = realloc ( bitmap->blocks, new_size );
|
new_blocks = realloc ( bitmap->blocks, new_size );
|
||||||
if ( ! new_blocks ) {
|
if ( ! new_blocks ) {
|
||||||
DBGC ( bitmap, "Bitmap %p could not resize to %d bits\n",
|
DBGC ( bitmap, "Bitmap %p could not resize to %d "
|
||||||
bitmap, new_length );
|
"bits\n", bitmap, new_length );
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
bitmap->blocks = new_blocks;
|
bitmap->blocks = new_blocks;
|
||||||
|
}
|
||||||
bitmap->length = new_length;
|
bitmap->length = new_length;
|
||||||
|
|
||||||
while ( old_num_blocks < new_num_blocks ) {
|
while ( old_num_blocks < new_num_blocks ) {
|
||||||
|
|
Loading…
Reference in New Issue