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) );