diff --git a/libfsxfs/libfsxfs_volume.c b/libfsxfs/libfsxfs_volume.c index 4a4e153..a3d39de 100644 --- a/libfsxfs/libfsxfs_volume.c +++ b/libfsxfs/libfsxfs_volume.c @@ -2349,6 +2349,8 @@ static int libfsxfs_allocation_group_traverse_alloc_tree( uint16_t num_records = 0; uint16_t record_index = 0; uint32_t magic_number = 0; + const size_t rec_size = 8; + const size_t ptr_size = 4; if( file_io_handle == NULL ) { @@ -2417,12 +2419,10 @@ static int libfsxfs_allocation_group_traverse_alloc_tree( if( magic_number == LIBFSXFS_BB_V5_MAGIC_NUMBER ) { header_size = 56; - max_records = 505; } else if( magic_number == LIBFSXFS_BB_V4_MAGIC_NUMBER ) { - header_size = 18; - max_records = 509; + header_size = 16; } else { @@ -2444,9 +2444,8 @@ static int libfsxfs_allocation_group_traverse_alloc_tree( if( tree_level > 1 ) { - size_t key_size = 4; - size_t ptr_size = 4; - size_t pointer_array_start = header_size + ( max_records * key_size ); + max_records = (block_size - header_size) / (rec_size + ptr_size); + size_t pointer_array_start = header_size + ( max_records * rec_size ); for( record_index = 0; record_index < num_records; record_index++ ) { @@ -2479,10 +2478,8 @@ static int libfsxfs_allocation_group_traverse_alloc_tree( } } } - else if( tree_level == 1 ) + else { - size_t rec_size = 8; - for( record_index = 0; record_index < num_records; record_index++ ) { uint32_t start_block = 0;