180 |
|
{ |
181 |
|
info.start_byte = 0; |
182 |
|
uint8 *map = new uint8[512]; |
183 |
+ |
D(bug("Looking for HFS partitions on CD-ROM...\n")); |
184 |
|
|
185 |
|
// Search first 64 blocks for HFS partition |
186 |
|
for (int i=0; i<64; i++) { |
187 |
|
if (Sys_read(info.fh, map, i * 512, 512) != 512) |
188 |
|
break; |
189 |
+ |
D(bug(" block %d, signature '%c%c' (%02x%02x)\n", i, map[0], map[1], map[0], map[1])); |
190 |
|
|
191 |
|
// Not a partition map block? Then look at next block |
192 |
|
uint16 sig = (map[0] << 8) | map[1]; |
195 |
|
|
196 |
|
// Partition map block found, Apple HFS partition? |
197 |
|
if (strcmp((char *)(map + 48), "Apple_HFS") == 0) { |
198 |
< |
info.start_byte = ntohl(((uint32 *)map)[2]) << 9; |
199 |
< |
D(bug(" HFS partition found at %d, %d blocks\n", info.start_byte, ntohl(((uint32 *)map)[3]))); |
198 |
> |
info.start_byte = (loff_t)((map[8] << 24) | (map[9] << 16) | (map[10] << 8) | map[11]) << 9; |
199 |
> |
uint32 num_blocks = (map[12] << 24) | (map[13] << 16) | (map[14] << 8) | map[15]; |
200 |
> |
D(bug(" HFS partition found at %d, %d blocks\n", info.start_byte, num_blocks)); |
201 |
|
break; |
202 |
|
} |
203 |
|
} |