int writeExtents()

in hfs/rawfile.c [353:404]


int writeExtents(RawFile* rawFile) {
	Extent* extent;
	int currentExtent;
	HFSPlusExtentKey extentKey;
	HFSPlusExtentDescriptor descriptor[8];
	HFSPlusForkData* forkData;

	removeExtents(rawFile);

	forkData = rawFile->forkData;
	currentExtent = 0;
	extent = rawFile->extents;

	memset(forkData->extents, 0, sizeof(HFSPlusExtentRecord));
	while(extent != NULL && currentExtent < 8) {
		((HFSPlusExtentDescriptor*)forkData->extents)[currentExtent].startBlock = extent->startBlock;
		((HFSPlusExtentDescriptor*)forkData->extents)[currentExtent].blockCount = extent->blockCount;
		extent = extent->next;
		currentExtent++;
	}

	if(extent != NULL) {
		extentKey.keyLength = sizeof(HFSPlusExtentKey) - sizeof(extentKey.keyLength);
		extentKey.forkType = 0;
		extentKey.fileID = rawFile->id;

		currentExtent = 0;

		while(extent != NULL) {
			if(currentExtent == 0) {
				memset(descriptor, 0, sizeof(HFSPlusExtentRecord));
			}

			if(currentExtent == 8) {
				extentKey.startBlock = descriptor[0].startBlock;
				addToBTree(rawFile->volume->extentsTree, (BTKey*)(&extentKey), sizeof(HFSPlusExtentRecord), (unsigned char *)(&(descriptor[0])));
				currentExtent = 0;
			}

			descriptor[currentExtent].startBlock = extent->startBlock;
			descriptor[currentExtent].blockCount = extent->blockCount;

			currentExtent++;
			extent = extent->next;
		}

		extentKey.startBlock = descriptor[0].startBlock;
		addToBTree(rawFile->volume->extentsTree, (BTKey*)(&extentKey), sizeof(HFSPlusExtentRecord), (unsigned char *)(&(descriptor[0])));
	}

	return TRUE;
}