Re-instated recognition of libisofs PReP which was broken by rev 1295.

This commit is contained in:
Thomas Schmitt 2016-04-24 10:38:45 +02:00
parent 03662f0832
commit 122dfe7b87
1 changed files with 25 additions and 23 deletions

View File

@ -3968,8 +3968,32 @@ int iso_analyze_mbr(IsoImage *image, IsoDataSource *src, int flag)
is_grub2_mbr = 1; is_grub2_mbr = 1;
} }
if (sai->mbr_req_count == 3 && !is_isohybrid) {
/* Check for libisofs PReP partitions :
0xee or 0xcd from 0 to a-1
0x41 from a to b
0x0c or 0xcd from b+1 to end
*/
if ((sai->mbr_req[0]->start_block == 0 &&
(sai->mbr_req[0]->type_byte == 0xee ||
sai->mbr_req[0]->type_byte == 0xcd)) &&
sai->mbr_req[0]->block_count == sai->mbr_req[1]->start_block &&
sai->mbr_req[1]->type_byte == 0x41 &&
(sai->mbr_req[1]->start_block % 4) == 0 &&
sai->mbr_req[1]->start_block + sai->mbr_req[1]->block_count ==
sai->mbr_req[2]->start_block &&
(sai->mbr_req[2]->type_byte == 0x0c ||
sai->mbr_req[2]->type_byte == 0xcd) &&
(sai->mbr_req[2]->start_block + sai->mbr_req[2]->block_count) / 4
== sai->image_size) {
sai->prep_part_start = sai->mbr_req[1]->start_block / 4;
sai->prep_part_size = (sai->mbr_req[1]->block_count + 3) / 4;
sub_type = 0;
}
}
if (sai->mbr_req_count >= 1 && if (sai->mbr_req_count >= 1 &&
(sai->mbr_req[0]->type_byte == 0xee || !is_isohybrid)) { (sai->mbr_req[0]->type_byte == 0xee || !is_isohybrid) &&
!sai->prep_part_start > 0) {
part = sai->mbr_req[0]; part = sai->mbr_req[0];
part2_start = 0; part2_start = 0;
if (sai->mbr_req_count >= 2) if (sai->mbr_req_count >= 2)
@ -4002,28 +4026,6 @@ int iso_analyze_mbr(IsoImage *image, IsoDataSource *src, int flag)
sai->prep_part_size = (sai->mbr_req[0]->block_count + 3) / 4; sai->prep_part_size = (sai->mbr_req[0]->block_count + 3) / 4;
sub_type = 0; sub_type = 0;
} }
} else if (sai->mbr_req_count == 3 && !is_isohybrid) {
/* Check for libisofs PReP partitions :
0xee or 0xcd from 0 to a-1
0x41 from a to b
0x0c or 0xcd from b+1 to end
*/
if ((sai->mbr_req[0]->start_block == 0 &&
(sai->mbr_req[0]->type_byte == 0xee ||
sai->mbr_req[0]->type_byte == 0xcd)) &&
sai->mbr_req[0]->block_count == sai->mbr_req[1]->start_block &&
sai->mbr_req[1]->type_byte == 0x41 &&
(sai->mbr_req[1]->start_block % 4) == 0 &&
sai->mbr_req[1]->start_block + sai->mbr_req[1]->block_count ==
sai->mbr_req[2]->start_block &&
(sai->mbr_req[2]->type_byte == 0x0c ||
sai->mbr_req[2]->type_byte == 0xcd) &&
(sai->mbr_req[2]->start_block + sai->mbr_req[2]->block_count) / 4
== sai->image_size) {
sai->prep_part_start = sai->mbr_req[1]->start_block / 4;
sai->prep_part_size = (sai->mbr_req[1]->block_count + 3) / 4;
sub_type = 0;
}
} }
/* Check for partition offset with extra set of meta data */ /* Check for partition offset with extra set of meta data */