Fix boot on old machines (e.g. blue and white G3s) by synthesizing a
512-byte sector map instead unused space in the first 2048-byte sector.
This commit is contained in:
parent
cb10fc9df3
commit
ebd3486c2a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=221470
@ -528,6 +528,25 @@ cd9660_write_apm_partition_entry(FILE *fd, int index, int total_partitions,
|
||||
fseek(fd, 32 - strlen(part_name) - 1, SEEK_CUR);
|
||||
fwrite(part_type, strlen(part_type) + 1, 1, fd);
|
||||
|
||||
if (sector_size > 512) {
|
||||
/*
|
||||
* Some old broken software looks at 512-byte boundaries for
|
||||
* partition table entries instead of sector boundaries. We
|
||||
* can fit 3 entries into the first 2048-byte block, so use
|
||||
* that to humor old code.
|
||||
*/
|
||||
|
||||
int n_512_parts = (sector_size / 512) - 1;
|
||||
if (n_512_parts > total_partitions)
|
||||
n_512_parts = total_partitions;
|
||||
|
||||
if (index < n_512_parts)
|
||||
cd9660_write_apm_partition_entry(fd, index, n_512_parts,
|
||||
sector_start * (sector_size / 512),
|
||||
nsectors * (sector_size / 512), 512, part_name,
|
||||
part_type);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user