diff --git a/fs/hfsplus/volume.c b/fs/hfsplus/volume.c index 783b4b1..df6bc0c 100644 --- a/fs/hfsplus/volume.c +++ b/fs/hfsplus/volume.c @@ -294,17 +294,21 @@ volume_create_extents_tree(volume* vol) 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; } + diff --git a/packages/mac-parts.c b/packages/mac-parts.c index 6c5a42c..f6d1ec9 100644 --- a/packages/mac-parts.c +++ b/packages/mac-parts.c @@ -127,13 +127,12 @@ macparts_open( macparts_info_t *di ) /* 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 @@ macparts_open( macparts_info_t *di ) goto out; } - parnum++; } /* not found */ if (firstHFS != -1) { @@ -199,7 +197,7 @@ macparts_open( macparts_info_t *di ) 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;