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
|
/* @param flag bit0= initialize system area by target->opts_overwrite
|
||||||
bit1= fifo is not yet draining. Inquire write_count from fifo.
|
bit1= fifo is not yet draining. Inquire write_count from fifo.
|
||||||
|
bit2= target->opts->ms_block is not counted in
|
||||||
|
target->total_size
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
int write_head_part1(Ecma119Image *target, int *write_count, int flag)
|
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) */
|
/* Write System Area (ECMA-119, 6.2.1) */
|
||||||
if ((flag & 1) && target->opts_overwrite != NULL)
|
if ((flag & 1) && target->opts_overwrite != NULL)
|
||||||
memcpy(sa, target->opts_overwrite, 16 * BLOCK_SIZE);
|
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)
|
if (res < 0)
|
||||||
goto write_error;
|
goto write_error;
|
||||||
res = iso_write(target, sa, 16 * BLOCK_SIZE);
|
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;
|
int res, write_count = 0;
|
||||||
|
|
||||||
/* System area and volume descriptors */
|
/* System area and volume descriptors */
|
||||||
res = write_head_part1(target, &write_count, 0);
|
res = write_head_part1(target, &write_count, 4);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
return res;
|
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 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;
|
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)
|
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
|
else
|
||||||
gpt_blocks = img_blocks;
|
gpt_blocks = img_blocks;
|
||||||
ret = iso_write_gpt(t, gpt_blocks, buf);
|
ret = iso_write_gpt(t, gpt_blocks, buf);
|
||||||
@ -2146,7 +2150,8 @@ int iso_write_system_area(Ecma119Image *t, uint8_t *buf)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (part_type == 0xee && t->gpt_req_count > 0) {
|
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 */
|
offset_flag |= 2 | 1; /* protective MBR, no other partitions */
|
||||||
} else {
|
} else {
|
||||||
mbrp1_blocks = img_blocks;
|
mbrp1_blocks = img_blocks;
|
||||||
|
@ -42,10 +42,12 @@ int make_isohybrid_mbr(int bin_lba, int *img_blocks, char *mbr, int flag);
|
|||||||
*
|
*
|
||||||
* @param buf
|
* @param buf
|
||||||
* A buffer with at least 32 K allocated
|
* A buffer with at least 32 K allocated
|
||||||
|
* @param flag
|
||||||
|
* bit0= t->opts->ms_block is not counted in t->total_size
|
||||||
* @return
|
* @return
|
||||||
* 1 if success, < 0 on error
|
* 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.
|
* Adjust t->tail_blocks to the eventual alignment needs of isohybrid booting.
|
||||||
|
Loading…
Reference in New Issue
Block a user