[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