Corrected size of GPT protective MBR partition with multi-session emulation
This commit is contained in:
parent
c068a19a8c
commit
8f3ff65c04
@ -1374,6 +1374,8 @@ ex:
|
||||
|
||||
/* @param flag bit0= initialize system area by target->opts_overwrite
|
||||
bit1= fifo is not yet draining. Inquire write_count from fifo.
|
||||
bit2= target->opts->ms_block is not counted in
|
||||
target->total_size
|
||||
*/
|
||||
static
|
||||
int write_head_part1(Ecma119Image *target, int *write_count, int flag)
|
||||
@ -1396,7 +1398,7 @@ int write_head_part1(Ecma119Image *target, int *write_count, int flag)
|
||||
/* Write System Area (ECMA-119, 6.2.1) */
|
||||
if ((flag & 1) && target->opts_overwrite != NULL)
|
||||
memcpy(sa, target->opts_overwrite, 16 * BLOCK_SIZE);
|
||||
res = iso_write_system_area(target, sa);
|
||||
res = iso_write_system_area(target, sa, (flag & 4) >> 2);
|
||||
if (res < 0)
|
||||
goto write_error;
|
||||
res = iso_write(target, sa, 16 * BLOCK_SIZE);
|
||||
@ -1500,7 +1502,7 @@ int write_head_part(Ecma119Image *target, int flag)
|
||||
int res, write_count = 0;
|
||||
|
||||
/* System area and volume descriptors */
|
||||
res = write_head_part1(target, &write_count, 0);
|
||||
res = write_head_part1(target, &write_count, 4);
|
||||
if (res < 0)
|
||||
return res;
|
||||
|
||||
|
@ -1875,7 +1875,10 @@ static void iso_dummy_mbr_partition(uint8_t *buf, int mode)
|
||||
}
|
||||
|
||||
|
||||
int iso_write_system_area(Ecma119Image *t, uint8_t *buf)
|
||||
/* @param flag
|
||||
bit0= t->opts->ms_block is not counted in t->total_size
|
||||
*/
|
||||
int iso_write_system_area(Ecma119Image *t, uint8_t *buf, int flag)
|
||||
{
|
||||
int ret, int_img_blocks, sa_type, i, will_append = 0, do_isohybrid = 0;
|
||||
int first_partition = 1, last_partition = 4, apm_flag, part_type = 0;
|
||||
@ -1984,7 +1987,8 @@ int iso_write_system_area(Ecma119Image *t, uint8_t *buf)
|
||||
}
|
||||
|
||||
if (t->gpt_backup_outside)
|
||||
gpt_blocks = t->total_size / BLOCK_SIZE + t->opts->ms_block;
|
||||
gpt_blocks = t->total_size / BLOCK_SIZE +
|
||||
(flag & 1) * t->opts->ms_block;
|
||||
else
|
||||
gpt_blocks = img_blocks;
|
||||
ret = iso_write_gpt(t, gpt_blocks, buf);
|
||||
@ -2146,7 +2150,8 @@ int iso_write_system_area(Ecma119Image *t, uint8_t *buf)
|
||||
#endif
|
||||
|
||||
if (part_type == 0xee && t->gpt_req_count > 0) {
|
||||
mbrp1_blocks = t->total_size / BLOCK_SIZE + t->opts->ms_block;
|
||||
mbrp1_blocks = t->total_size / BLOCK_SIZE +
|
||||
(flag & 1) * t->opts->ms_block;
|
||||
offset_flag |= 2 | 1; /* protective MBR, no other partitions */
|
||||
} else {
|
||||
mbrp1_blocks = img_blocks;
|
||||
|
@ -42,10 +42,12 @@ int make_isohybrid_mbr(int bin_lba, int *img_blocks, char *mbr, int flag);
|
||||
*
|
||||
* @param buf
|
||||
* A buffer with at least 32 K allocated
|
||||
* @param flag
|
||||
* bit0= t->opts->ms_block is not counted in t->total_size
|
||||
* @return
|
||||
* 1 if success, < 0 on error
|
||||
*/
|
||||
int iso_write_system_area(Ecma119Image *t, uint8_t *buf);
|
||||
int iso_write_system_area(Ecma119Image *t, uint8_t *buf, int flag);
|
||||
|
||||
/**
|
||||
* Adjust t->tail_blocks to the eventual alignment needs of isohybrid booting.
|
||||
|
Loading…
Reference in New Issue
Block a user