summaryrefslogtreecommitdiffstats
path: root/src/hfsp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hfsp.c')
-rw-r--r--src/hfsp.c52
1 files changed, 23 insertions, 29 deletions
diff --git a/src/hfsp.c b/src/hfsp.c
index e1a7c945..493ce5f8 100644
--- a/src/hfsp.c
+++ b/src/hfsp.c
@@ -85,47 +85,41 @@ int recover_HFSP(disk_t *disk_car, const struct hfsp_vh *vh,partition_t *partiti
int test_HFSP(disk_t *disk_car, const struct hfsp_vh *vh,partition_t *partition,const int verbose, const int dump_ind)
{
- if (vh->signature==be16(HFSP_VOLHEAD_SIG) && be32(vh->blocksize)%512==0 && be32(vh->blocksize)!=0 && be32(vh->free_blocks)<=be32(vh->total_blocks))
+ if (!(be32(vh->blocksize)%512==0 && be32(vh->blocksize)!=0 && be32(vh->free_blocks)<=be32(vh->total_blocks)))
+ return 1;
+ /* http://developer.apple.com/technotes/tn/tn1150.html */
+ if (be16(vh->version)==4 && vh->signature==be16(HFSP_VOLHEAD_SIG))
{
+ partition->upart_type=UP_HFSP;
if(verbose>0 || dump_ind!=0)
{
log_info("\nHFS+ magic value at %u/%u/%u\n", offset2cylinder(disk_car,partition->part_offset),offset2head(disk_car,partition->part_offset),offset2sector(disk_car,partition->part_offset));
}
- if(dump_ind!=0)
- {
- /* There is a little offset ... */
- dump_log(vh,DEFAULT_SECTOR_SIZE);
- }
- if(verbose>1)
- {
- log_info("blocksize %u\n",(unsigned) be32(vh->blocksize));
- log_info("total_blocks %u\n",(unsigned) be32(vh->total_blocks));
- log_info("free_blocks %u\n",(unsigned) be32(vh->free_blocks));
- }
- partition->upart_type=UP_HFSP;
- return 0;
}
- if (vh->signature==be16(HFSX_VOLHEAD_SIG) && be32(vh->blocksize)%512==0 && be32(vh->blocksize)!=0 && be32(vh->free_blocks)<=be32(vh->total_blocks))
+ else if (be16(vh->version)==5 && vh->signature==be16(HFSX_VOLHEAD_SIG))
{
+ partition->upart_type=UP_HFSX;
if(verbose>0 || dump_ind!=0)
{
log_info("\nHFSX magic value at %u/%u/%u\n", offset2cylinder(disk_car,partition->part_offset),offset2head(disk_car,partition->part_offset),offset2sector(disk_car,partition->part_offset));
}
- if(dump_ind!=0)
- {
- /* There is a little offset ... */
- dump_log(vh,DEFAULT_SECTOR_SIZE);
- }
- if(verbose>1)
- {
- log_info("blocksize %u\n",(unsigned) be32(vh->blocksize));
- log_info("total_blocks %u\n",(unsigned) be32(vh->total_blocks));
- log_info("free_blocks %u\n",(unsigned) be32(vh->free_blocks));
- }
- partition->upart_type=UP_HFSX;
- return 0;
}
- return 1;
+ else
+ {
+ return 1;
+ }
+ if(dump_ind!=0)
+ {
+ /* There is a little offset ... */
+ dump_log(vh,DEFAULT_SECTOR_SIZE);
+ }
+ if(verbose>1)
+ {
+ log_info("blocksize %u\n",(unsigned) be32(vh->blocksize));
+ log_info("total_blocks %u\n",(unsigned) be32(vh->total_blocks));
+ log_info("free_blocks %u\n",(unsigned) be32(vh->free_blocks));
+ }
+ return 0;
}
static int set_HFSP_info(partition_t *partition, const struct hfsp_vh *vh)