size_t CelFile::readCl2ArchiveFrames(FAIO::FAFile* file) { FAIO::FAfseek(file, 0, SEEK_SET); std::vector<uint32_t> headerOffsets(8); FAIO::FAfread(&headerOffsets[0], 4, 8, file); uint32_t numFrames; for(size_t i = 0; i < 8; i++) { FAIO::FAfseek(file, headerOffsets[i], SEEK_SET); FAIO::FAfread(&numFrames, 4, 1, file); std::vector<uint32_t> frameOffsets(numFrames+1); for(size_t j = 0; j <= numFrames; j++) FAIO::FAfread(&frameOffsets[j], 4, 1, file); FAIO::FAfseek(file, headerOffsets[i]+ frameOffsets[0], SEEK_SET); for(size_t j = 0; j < numFrames; j++) { mFrames.push_back(std::vector<uint8_t>(frameOffsets[j+1]-frameOffsets[j])); FAIO::FAfread(&mFrames[mFrames.size()-1][0], 1, frameOffsets[j+1]-frameOffsets[j], file); } } return numFrames; }
size_t CelFile::readCl2ArchiveFrames(FAIO::FAFile* file) { FAIO::FAfseek(file, 0, SEEK_SET); std::vector<uint32_t> headerOffsets(8); FAIO::FAfread(&headerOffsets[0], 4, 8, file); uint32_t numFrames; for(size_t i = 0; i < 8; i++) { FAIO::FAfseek(file, headerOffsets[i], SEEK_SET); FAIO::FAfread(&numFrames, 4, 1, file); std::vector<uint32_t> frameOffsets(numFrames+1); bool error = false; for(size_t j = 0; j <= numFrames; j++) { int success = FAIO::FAfread(&frameOffsets[j], 4, 1, file); // Dirty hack to prevent further loading cl2 // that can't be loaded because we don't know how. if(!success) { error = true; numFrames = 0; break; } } if(error) break; FAIO::FAfseek(file, headerOffsets[i]+ frameOffsets[0], SEEK_SET); for(size_t j = 0; j < numFrames; j++) { int diff = frameOffsets[j+1]-frameOffsets[j]; if(diff > 0) { mFrames.push_back(std::vector<uint8_t>(diff)); FAIO::FAfread(&mFrames[mFrames.size()-1][0], 1, diff, file); } } } return numFrames; }