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:
Nathan Whitehorn 2011-05-05 00:52:19 +00:00
parent cb10fc9df3
commit ebd3486c2a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=221470

View File

@ -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;
}