MCPcopy Create free account
hub / github.com/cgsecurity/testdisk / test_HFSP

Function test_HFSP

src/hfsp.c:118–161  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

116}
117
118int test_HFSP(const disk_t *disk_car, const struct hfsp_vh *vh, const partition_t *partition, const int verbose, const int dump_ind)
119{
120 if (be32(vh->free_blocks) > be32(vh->total_blocks))
121 return 1;
122 /* Blocksize must be a multiple of 512 */
123 if (be32(vh->blocksize)<512 ||
124 ((be32(vh->blocksize)-1) & be32(vh->blocksize))!=0)
125 return 1;
126 /* http://developer.apple.com/technotes/tn/tn1150.html */
127 if (be16(vh->version)==4 && vh->signature==be16(HFSP_VOLHEAD_SIG))
128 {
129 if(partition==NULL)
130 return 0;
131 if(verbose>0 || dump_ind!=0)
132 {
133 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));
134 }
135 }
136 else if (be16(vh->version)==5 && vh->signature==be16(HFSX_VOLHEAD_SIG))
137 {
138 if(partition==NULL)
139 return 0;
140 if(verbose>0 || dump_ind!=0)
141 {
142 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));
143 }
144 }
145 else
146 {
147 return 1;
148 }
149 if(dump_ind!=0)
150 {
151 /* There is a little offset ... */
152 dump_log(vh,DEFAULT_SECTOR_SIZE);
153 }
154 if(verbose>1)
155 {
156 log_info("blocksize %u\n",(unsigned) be32(vh->blocksize));
157 log_info("total_blocks %u\n",(unsigned) be32(vh->total_blocks));
158 log_info("free_blocks %u\n",(unsigned) be32(vh->free_blocks));
159 }
160 return 0;
161}

Callers 3

check_HFSPFunction · 0.85
recover_HFSPFunction · 0.85

Calls 4

offset2cylinderFunction · 0.85
offset2headFunction · 0.85
offset2sectorFunction · 0.85
dump_logFunction · 0.85

Tested by

no test coverage detected