8 read_mac_pt(int fd, struct slice all, struct slice *sp, int ns) {
9 struct mac_driver_desc *md;
10 struct mac_partition *part;
13 int blk, blocks_in_map;
16 md = (struct mac_driver_desc *) getblock(fd, 0);
20 if (be16_to_cpu(md->signature) != MAC_DRIVER_MAGIC)
23 secsize = be16_to_cpu(md->block_size);
24 data = getblock(fd, secsize/512);
27 part = (struct mac_partition *) (data + secsize%512);
29 if (be16_to_cpu(part->signature) != MAC_PARTITION_MAGIC)
32 blocks_in_map = be32_to_cpu(part->map_count);
33 for (blk = 1; blk <= blocks_in_map && blk <= ns; ++blk, ++n) {
34 int pos = blk * secsize;
35 data = getblock(fd, pos/512);
39 part = (struct mac_partition *) (data + pos%512);
40 if (be16_to_cpu(part->signature) != MAC_PARTITION_MAGIC)
43 sp[n].start = be32_to_cpu(part->start_block) * (secsize/512);
44 sp[n].size = be32_to_cpu(part->block_count) * (secsize/512);