Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 May 2011 00:52:19 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r221470 - head/usr.sbin/makefs/cd9660
Message-ID:  <201105050052.p450qJhO074408@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105050052.p450qJhO074408>