[OpenBIOS] [commit] r794 - in trunk/openbios-devel: fs/hfsplus packages

repository service svn at openbios.org
Tue Jun 15 18:31:54 CEST 2010


Author: mcayland
Date: Tue Jun 15 18:31:54 2010
New Revision: 794
URL: http://tracker.coreboot.org/trac/openbios/changeset/794

Log:
Fix the HFSP probe function, plus also resolve an off-by-one error in the mac-parts partition code. This should fix PPC boot once again.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>

Modified:
   trunk/openbios-devel/fs/hfsplus/volume.c
   trunk/openbios-devel/packages/mac-parts.c

Modified: trunk/openbios-devel/fs/hfsplus/volume.c
==============================================================================
--- trunk/openbios-devel/fs/hfsplus/volume.c	Thu Jun 10 20:35:25 2010	(r793)
+++ trunk/openbios-devel/fs/hfsplus/volume.c	Tue Jun 15 18:31:54 2010	(r794)
@@ -294,17 +294,21 @@
 int
 volume_probe(int fd, llong offset)
 {
-	struct hfsp_vh *vol;
+	UInt16 *vol;
+	int ret = 0;
 
-	vol = (struct hfsp_vh*)malloc(2 * 1 << HFSP_BLOCKSZ_BITS);
+	vol = (UInt16 *)malloc(2 * 1 << HFSP_BLOCKSZ_BITS);
 	os_seek_offset( fd, 2 * (1 << HFSP_BLOCKSZ_BITS) + offset );
 	os_read(fd, vol, 2, HFSP_BLOCKSZ_BITS);
 
-	if (__be16_to_cpu(vol->signature) != HFSP_VOLHEAD_SIG) {
-		free(vol);
-		return 0;
+	if (__be16_to_cpu(vol[0]) == HFS_VOLHEAD_SIG &&
+		__be16_to_cpu(vol[0x7c]) == HFSP_VOLHEAD_SIG) {
+		ret = -1;	
+	} else if (__be16_to_cpu(vol[0]) == HFSP_VOLHEAD_SIG) {
+		ret = -1;
 	}
 
 	free(vol);
-	return -1;
+	return ret;
 }
+

Modified: trunk/openbios-devel/packages/mac-parts.c
==============================================================================
--- trunk/openbios-devel/packages/mac-parts.c	Thu Jun 10 20:35:25 2010	(r793)
+++ trunk/openbios-devel/packages/mac-parts.c	Tue Jun 15 18:31:54 2010	(r794)
@@ -127,13 +127,12 @@
 		/* search a bootable partition */
 		/* see PowerPC Microprocessor CHRP bindings */
 
-		parnum = 1;
-		while (parnum <= __be32_to_cpu(par.pmMapBlkCnt)) {
-			SEEK( (bs * parnum) );
+		for (parnum = 0; parnum <= __be32_to_cpu(par.pmMapBlkCnt); parnum++) {
+			SEEK( (bs * (parnum + 1)) );
 			READ( &par, sizeof(par) );
 			if( __be16_to_cpu(par.pmSig) != DESC_PART_SIGNATURE ||
                             !__be16_to_cpu(par.pmPartBlkCnt) )
-				goto out;
+				break;
 
 			DPRINTF("found partition type: %s\n", par.pmPartType);
 
@@ -169,7 +168,6 @@
 				goto out;
 			}
 
-			parnum++;
 		}
 		/* not found */
 		if (firstHFS != -1) {
@@ -199,7 +197,7 @@
 		goto out;
 
 found:
-	SEEK( (bs * parnum) );
+	SEEK( (bs * (parnum + 1)) );
 	READ( &par, sizeof(par) );
 	if( __be16_to_cpu(par.pmSig) != DESC_PART_SIGNATURE || !__be32_to_cpu(par.pmPartBlkCnt) )
 		goto out;



More information about the OpenBIOS mailing list