Author: nwhitehorn
Date: Thu May  5 00:52:19 2011
New Revision: 221470
URL: http://svn.freebsd.org/changeset/base/221470

Log:
  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.

Modified:
  head/usr.sbin/makefs/cd9660/cd9660_eltorito.c

Modified: head/usr.sbin/makefs/cd9660/cd9660_eltorito.c
==============================================================================
--- head/usr.sbin/makefs/cd9660/cd9660_eltorito.c       Thu May  5 00:43:55 
2011        (r221469)
+++ head/usr.sbin/makefs/cd9660/cd9660_eltorito.c       Thu May  5 00:52:19 
2011        (r221470)
@@ -528,6 +528,25 @@ cd9660_write_apm_partition_entry(FILE *f
        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;
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to