示例#1
0
文件: img3.c 项目: 0x76/opensn0w
Img3Element *readImg3Element(AbstractFile * file)
{
	Img3Element *toReturn;
	AppleImg3Header *header;
	off_t curPos;

	curPos = file->tell(file);

	header = (AppleImg3Header *) malloc(sizeof(AppleImg3Header));
	file->read(file, header, sizeof(AppleImg3Header));
	flipAppleImg3Header(header);

	toReturn = (Img3Element *) malloc(sizeof(Img3Element));
	toReturn->header = header;
	toReturn->next = NULL;

	switch (header->magic) {
	case IMG3_MAGIC:
		readImg3Root(file, toReturn);
		break;

	case IMG3_KBAG_MAGIC:
		toReturn->data = (unsigned char *)malloc(header->dataSize);
		toReturn->write = writeImg3KBAG;
		toReturn->free = freeImg3Default;
		file->read(file, toReturn->data, header->dataSize);
		flipAppleImg3KBAGHeader((AppleImg3KBAGHeader *) toReturn->data);
		break;

	default:
		{
			uint32_t sz = header->size - sizeof(AppleImg3Header);	/* header->dataSize */
			toReturn->data = (unsigned char *)malloc(sz);
			toReturn->write = writeImg3Default;
			toReturn->free = freeImg3Default;
			file->read(file, toReturn->data, sz);
		}
	}

	file->seek(file, curPos + toReturn->header->size);

	return toReturn;
}
示例#2
0
void writeImg3KBAG(AbstractFile* file, Img3Element* element, Img3Info* info) {
	flipAppleImg3KBAGHeader((AppleImg3KBAGHeader*) element->data);
	writeImg3Default(file, element, info);
	flipAppleImg3KBAGHeader((AppleImg3KBAGHeader*) element->data);
}