int extractDmg()

in dmg/dmglib.c [10:48]


int extractDmg(AbstractFile* abstractIn, AbstractFile* abstractOut, int partNum) 
{
    io_func* dmgfile = openDmgFile(abstractIn);
    
    if (!dmgfile) {
        fprintf(stderr, "cannot open dmg file\n");
        return FALSE;
    }
    
    DMG* dmg = (DMG*)dmgfile->data;
	ResourceKey* resources = dmg->resources;
	ResourceData* blkxData;
		
	printf("Writing out data..\n"); fflush(stdout);
	
	/* reasonable assumption that 2 is the main partition, given that that's usually the case in SPUD layouts */
	if(partNum < 0) {
		blkxData = getResourceByKey(resources, "blkx")->data;
		while(blkxData != NULL) {
			if(strstr(blkxData->name, "Apple_HFS") != NULL) {
				break;
			}
			blkxData = blkxData->next;
		}
	} else {
		blkxData = getDataByID(getResourceByKey(resources, "blkx"), partNum);
	}
	
	if(blkxData) {
		extractBLKX(abstractIn, abstractOut, (BLKXTable*)(blkxData->data));
	} else {
		printf("BLKX not found!\n"); fflush(stdout);
	}
	abstractOut->close(abstractOut);
	
    dmgfile->close(dmgfile); // will also close abstractIn
	
	return TRUE;
}