in dmg/partition.c [387:432]
void flipPartitionMultiple(Partition* partition, char multiple, char out, unsigned int BlockSize) {
int i;
int numPartitions;
if(out) {
numPartitions = partition->pmMapBlkCnt;
} else {
numPartitions = partition->pmMapBlkCnt;
FLIPENDIAN(numPartitions);
}
for(i = 0; i < numPartitions; i++) {
if(out) {
if(partition->pmSig != APPLE_PARTITION_MAP_SIGNATURE) {
break;
}
FLIPENDIAN(partition->pmSig);
} else {
FLIPENDIAN(partition->pmSig);
if(partition->pmSig != APPLE_PARTITION_MAP_SIGNATURE) {
break;
}
}
FLIPENDIAN(partition->pmMapBlkCnt);
FLIPENDIAN(partition->pmPyPartStart);
FLIPENDIAN(partition->pmPartBlkCnt);
FLIPENDIAN(partition->pmLgDataStart);
FLIPENDIAN(partition->pmDataCnt);
FLIPENDIAN(partition->pmPartStatus);
FLIPENDIAN(partition->pmLgBootStart);
FLIPENDIAN(partition->pmBootSize);
FLIPENDIAN(partition->pmBootAddr);
FLIPENDIAN(partition->pmBootAddr2);
FLIPENDIAN(partition->pmBootEntry);
FLIPENDIAN(partition->pmBootEntry2);
FLIPENDIAN(partition->pmBootCksum);
FLIPENDIANLE(partition->bootCode);
if(!multiple) {
break;
}
partition = (Partition*)((uint8_t*)partition + BlockSize);
}
}