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) );
On 30/11/12 19:24, Programmingkid wrote:
Hi John,
I'm afraid this patch is still incorrect. Comments inline:
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++)
{
This part is white-space damage and shouldn't be part of the diff.
SEEK( bs * parnum ); READ(&par, sizeof(par) );
if( __be16_to_cpu(par.pmSig) != DESC_PART_SIGNATURE ||
!__be32_to_cpu(par.pmPartBlkCnt) )
break;
Ditto.
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)
{
This is the part you likely want to keep.
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 {
More white-space damage - this needs to be removed.
}
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
- {
This entire section should no longer be needed since r1072.
ATB,
Mark.