New option bits 8 and 9 with iso_write_opts_set_system_area().
This commit is contained in:
parent
e035146e01
commit
43eae7502b
@ -1698,7 +1698,7 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img)
|
||||
system_area = src->system_area_data;
|
||||
system_area_options = src->system_area_options;
|
||||
} else {
|
||||
system_area_options = opts->system_area_options & 0xfc;
|
||||
system_area_options = opts->system_area_options & 0xfffffffc;
|
||||
}
|
||||
sa_type = (system_area_options >> 2) & 0x3f;
|
||||
if (sa_type != 0 && sa_type != 3)
|
||||
@ -2910,7 +2910,7 @@ int iso_write_opts_set_system_area(IsoWriteOpts *opts, char data[32768],
|
||||
memcpy(opts->system_area_data, data, 32768);
|
||||
}
|
||||
if (!(flag & 4))
|
||||
opts->system_area_options = options & 0xff;
|
||||
opts->system_area_options = options & 0x3ff;
|
||||
return ISO_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -575,19 +575,27 @@ struct ecma119_image
|
||||
*/
|
||||
char *system_area_data;
|
||||
/*
|
||||
* bit0= Only with PC-BIOS DOS MBR
|
||||
* bit0= Only with DOS MBR
|
||||
* Make bytes 446 - 512 of the system area a partition
|
||||
* table which reserves partition 1 from byte 63*512 to the
|
||||
* end of the ISO image. Assumed are 63 secs/hed, 255 head/cyl.
|
||||
* (GRUB protective msdos label.)
|
||||
* This works with and without system_area_data.
|
||||
* bit1= Only with PC-BIOS DOS MBR
|
||||
* bit1= Only with DOS MBR
|
||||
* Apply isohybrid MBR patching to the system area.
|
||||
* This works only with system_area_data plus ISOLINUX boot image
|
||||
* and only if not bit0 is set.
|
||||
* bit2-7= System area type
|
||||
* 0= DOS MBR
|
||||
* 1= MIPS Big Endian Volume Header
|
||||
* 2= DEC Boot Block for MIPS Little Endian
|
||||
* 3= SUN Disk Label for SUN SPARC
|
||||
* bit8-9= Only with DOS MBR
|
||||
* Cylinder alignment mode eventually pads the image to make it
|
||||
* end at a cylinder boundary.
|
||||
* 0 = auto (align if bit1)
|
||||
* 1 = always align to cylinder boundary
|
||||
* 2 = never align to cylinder boundary
|
||||
*/
|
||||
int system_area_options;
|
||||
|
||||
|
@ -1959,7 +1959,13 @@ int iso_write_opts_set_fifo_size(IsoWriteOpts *opts, size_t fifo_size);
|
||||
* iso_write_opts_set_partition_img() for partition numbers 2
|
||||
* to 8.
|
||||
* This will overwrite the first 512 bytes of the submitted
|
||||
* data.
|
||||
* bit8-9= Only with System area type 0 = MBR
|
||||
* @since 1.0.4
|
||||
* Cylinder alignment mode eventually pads the image to make it
|
||||
* end at a cylinder boundary.
|
||||
* 0 = auto (align if bit1)
|
||||
* 1 = always align to cylinder boundary
|
||||
* 2 = never align to cylinder boundary
|
||||
* @param flag
|
||||
* bit0 = invalidate any attached system area data. Same as data == NULL
|
||||
* (This re-activates eventually loaded image System Area data.
|
||||
|
@ -841,17 +841,20 @@ int try_sph(off_t imgsize, int secs_per_head, int *heads_per_cyl, int flag)
|
||||
|
||||
int iso_align_isohybrid(Ecma119Image *t, int flag)
|
||||
{
|
||||
int sa_type, ret;
|
||||
int sa_type, ret, always_align;
|
||||
uint32_t img_blocks;
|
||||
off_t imgsize, cylsize = 0, frac;
|
||||
|
||||
sa_type = (t->system_area_options >> 2) & 0x3f;
|
||||
if (sa_type != 0)
|
||||
return ISO_SUCCESS;
|
||||
always_align = (t->system_area_options >> 8) & 3;
|
||||
if (always_align >= 2)
|
||||
return ISO_SUCCESS;
|
||||
|
||||
img_blocks = t->curblock;
|
||||
imgsize = ((off_t) img_blocks) * (off_t) 2048;
|
||||
if ((t->system_area_options & 3)
|
||||
if (((t->system_area_options & 3) || always_align)
|
||||
&& (off_t) (t->partition_heads_per_cyl * t->partition_secs_per_head
|
||||
* 1024) * (off_t) 512 < imgsize) {
|
||||
/* Choose small values which can represent the image size */
|
||||
@ -875,7 +878,7 @@ int iso_align_isohybrid(Ecma119Image *t, int flag)
|
||||
}
|
||||
|
||||
cylsize = 0;
|
||||
if (sa_type == 0 && t->catalog != NULL &&
|
||||
if (t->catalog != NULL &&
|
||||
(t->catalog->bootimages[0]->isolinux_options & 0x0a) == 0x02) {
|
||||
/* Check for isolinux image with magic number of 3.72 and produce
|
||||
an MBR from our built-in template. (Deprecated since 31 Mar 2010)
|
||||
@ -883,7 +886,7 @@ int iso_align_isohybrid(Ecma119Image *t, int flag)
|
||||
if (img_blocks >= 0x40000000)
|
||||
return ISO_SUCCESS;
|
||||
cylsize = 64 * 32 * 512;
|
||||
} else if (sa_type == 0 && (t->system_area_options & 2)) {
|
||||
} else if ((t->system_area_options & 2) || always_align) {
|
||||
/* Patch externally provided system area as isohybrid MBR */
|
||||
if (t->catalog == NULL || t->system_area_data == NULL) {
|
||||
/* isohybrid makes only sense together with ISOLINUX boot image
|
||||
|
Loading…
Reference in New Issue
Block a user