[OpenBIOS] Patch for auto partition selection

Programmingkid programmingkidx at gmail.com
Fri Nov 30 20:24:13 CET 2012


> 
> I've committed a fix for dir cd:,\ as r1072 as it seems that you are trying to solve 2 problems here. Please resubmit the part that changes the partition detection criteria (should now be very minimal) back to the openbios-devel list for review.
> 
> 
> Kind regards,
> 
> Mark.


This patch adds a partition auto selection feature. It has been tested against r1075. This patch makes dir cd:,\ actually work.

Index: packages/mac-parts.c
===================================================================
--- packages/mac-parts.c	(revision 1075)
+++ packages/mac-parts.c	(working copy)
@@ -161,29 +161,29 @@
 		DPRINTF("mac-parts: counted %d partitions\n", __be32_to_cpu(par.pmMapBlkCnt));
 
 		/* No partition was explicitly requested so let's find a suitable partition... */
-		for (parnum = 1; parnum <= __be32_to_cpu(par.pmMapBlkCnt); parnum++) {
+		for (parnum = 1; parnum <= __be32_to_cpu(par.pmMapBlkCnt); parnum++) 
+		{
 			SEEK( bs * parnum );
 			READ( &par, sizeof(par) );
-			if( __be16_to_cpu(par.pmSig) != DESC_PART_SIGNATURE ||
-                            !__be32_to_cpu(par.pmPartBlkCnt) )
-				break;
-
+			
 			DPRINTF("found partition type: %s with status %x\n", par.pmPartType, __be32_to_cpu(par.pmPartStatus));
 
-			/* If we have a valid, allocated and readable partition... */
-			if( (__be32_to_cpu(par.pmPartStatus) & kPartitionAUXIsValid) &&
-			(__be32_to_cpu(par.pmPartStatus) & kPartitionAUXIsAllocated) &&
-			(__be32_to_cpu(par.pmPartStatus) & kPartitionAUXIsReadable) ) {
+			// If an Apple_HFS or Apple_HFSX partition was found
+			if(strcmp(par.pmPartType, "Apple_HFS") == 0 || strcmp(par.pmPartType, "Apple_HFSX") == 0)
+			{
 				offs = (long long)__be32_to_cpu(par.pmPyPartStart) * bs;
 				size = (long long)__be32_to_cpu(par.pmPartBlkCnt) * bs;
 
 				/* If the filename was set to %BOOT, we actually want the bootcode */
-				if (want_bootcode && (__be32_to_cpu(par.pmPartStatus) & kPartitionAUXIsBootValid)) {
+				if (want_bootcode && (__be32_to_cpu(par.pmPartStatus) & kPartitionAUXIsBootValid)) 
+				{
 					offs += (long long)__be32_to_cpu(par.pmLgBootStart) * bs;
 					size = (long long)__be32_to_cpu(par.pmBootSize);
-
 					goto found;
-				} else {
+				}
+				
+				else
+				{
 					/* Otherwise we were passed a filename and path. So let's
 					   choose the first partition with a valid filesystem */
 					DPUSH( offs );
@@ -196,9 +196,31 @@
 				}
 			}
 		}
-
-	} else {
-		/* Another partition was explicitly requested */
+	}
+	
+	// if no partition and no file was selected - example: "dir cd:,\"
+	else if (parnum == -1)  
+	{
+      // search for the first partition of type Apple_HFS or Apple_HFSX
+      for(parnum = 1; parnum <= __be32_to_cpu(par.pmMapBlkCnt); parnum++)
+      {
+         SEEK( bs * parnum );
+         READ( &par, sizeof(par) );
+         DPRINTF("found partition type: %s with status %x\n", par.pmPartType, __be32_to_cpu(par.pmPartStatus));
+         if(strcmp(par.pmPartType, "Apple_HFS") == 0 || strcmp(par.pmPartType, "Apple_HFSX") == 0)
+         {
+               offs = (long long)__be32_to_cpu(par.pmPyPartStart) * bs;
+               size = (long long)__be32_to_cpu(par.pmPartBlkCnt) * bs;
+               goto found; 
+               break;
+         }
+      }
+   }
+   
+   // Another partition was explicitly requested
+   else 
+   {
+			
 		SEEK( bs * parnum );
 		READ( &par, sizeof(par) );
 




More information about the OpenBIOS mailing list