Preventing production of surplus isohybrid MBR partition for BIOS boot image.
The problem was introduced by rev 1299.
This commit is contained in:
parent
872b5c6c67
commit
3d15642307
@ -436,7 +436,7 @@ int assess_isohybrid_gpt_apm(Ecma119Image *t, int *gpt_count, int gpt_idx[128],
|
|||||||
if ((((ilx_opts >> 2) & 63) == 1 || ((ilx_opts >> 2) & 63) == 2) &&
|
if ((((ilx_opts >> 2) & 63) == 1 || ((ilx_opts >> 2) & 63) == 2) &&
|
||||||
!(t->boot_appended_idx[i] >= 0 && t->opts->appended_as_gpt)) {
|
!(t->boot_appended_idx[i] >= 0 && t->opts->appended_as_gpt)) {
|
||||||
if (*gpt_count < 128)
|
if (*gpt_count < 128)
|
||||||
gpt_idx[*gpt_count]= i;
|
gpt_idx[*gpt_count] = i;
|
||||||
(*gpt_count)++;
|
(*gpt_count)++;
|
||||||
if ((flag & 1) &&
|
if ((flag & 1) &&
|
||||||
(t->bootsrc[i] != NULL || t->boot_appended_idx[i] >= 0)) {
|
(t->bootsrc[i] != NULL || t->boot_appended_idx[i] >= 0)) {
|
||||||
@ -495,8 +495,11 @@ int assess_isohybrid_gpt_apm(Ecma119Image *t, int *gpt_count, int gpt_idx[128],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*gpt_count > 0 && !(flag & 4))
|
if (*gpt_count > 0 && !(flag & 4)) {
|
||||||
(*gpt_count)++;
|
(*gpt_count)++;
|
||||||
|
if (*gpt_count < 128)
|
||||||
|
gpt_idx[*gpt_count] = -1;
|
||||||
|
}
|
||||||
if ((flag & 1) && *gpt_count > 0 && !(flag & 4)) {
|
if ((flag & 1) && *gpt_count > 0 && !(flag & 4)) {
|
||||||
/* Register overall GPT partition */
|
/* Register overall GPT partition */
|
||||||
memset(gpt_name, 0, 72);
|
memset(gpt_name, 0, 72);
|
||||||
@ -562,13 +565,17 @@ static int insert_apm_head(uint8_t *buf, int apm_count)
|
|||||||
static int gpt_images_as_mbr_partitions(Ecma119Image *t, char *wpt,
|
static int gpt_images_as_mbr_partitions(Ecma119Image *t, char *wpt,
|
||||||
int gpt_idx[128], int *gpt_cursor)
|
int gpt_idx[128], int *gpt_cursor)
|
||||||
{
|
{
|
||||||
int ilx_opts;
|
int ilx_opts, skip = 0;
|
||||||
off_t hd_blocks;
|
off_t hd_blocks;
|
||||||
static uint8_t dummy_chs[3] = {
|
static uint8_t dummy_chs[3] = {
|
||||||
0xfe, 0xff, 0xff,
|
0xfe, 0xff, 0xff,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (t->bootsrc[gpt_idx[*gpt_cursor]] == NULL) {
|
if (gpt_idx[*gpt_cursor] < 0)
|
||||||
|
skip = 1;
|
||||||
|
else if (t->bootsrc[gpt_idx[*gpt_cursor]] == NULL)
|
||||||
|
skip = 1;
|
||||||
|
if (skip) {
|
||||||
(*gpt_cursor)++;
|
(*gpt_cursor)++;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@ -611,7 +618,7 @@ int make_isolinux_mbr(uint32_t *img_blocks, Ecma119Image *t,
|
|||||||
char *wpt;
|
char *wpt;
|
||||||
uint32_t boot_lba;
|
uint32_t boot_lba;
|
||||||
int head_count, sector_count, ret;
|
int head_count, sector_count, ret;
|
||||||
int gpt_count = 0, gpt_idx[128], apm_count = 0, gpt_cursor;
|
int gpt_count = 0, gpt_idx[128], apm_count = 0, gpt_cursor, i;
|
||||||
/* For generating a weak random number */
|
/* For generating a weak random number */
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct timezone tz;
|
struct timezone tz;
|
||||||
@ -620,6 +627,9 @@ int make_isolinux_mbr(uint32_t *img_blocks, Ecma119Image *t,
|
|||||||
return iso_msg_submit(t->image->id, ISO_BOOT_IMAGE_NOT_VALID, 0,
|
return iso_msg_submit(t->image->id, ISO_BOOT_IMAGE_NOT_VALID, 0,
|
||||||
"Cannot refer by isohybrid MBR to data outside of ISO 9660 filesystem.");
|
"Cannot refer by isohybrid MBR to data outside of ISO 9660 filesystem.");
|
||||||
|
|
||||||
|
for (i = 0; i < 128; i++)
|
||||||
|
gpt_idx[i] = -1;
|
||||||
|
|
||||||
if (flag & 2) {
|
if (flag & 2) {
|
||||||
part_number = 1;
|
part_number = 1;
|
||||||
part_offset = 1;
|
part_offset = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user