// Try to apply void CFStream::applyDelayedItems() { ReceiverItems& res = receiver_items; SourceItems& src = source_items; for(ReceiverItems::iterator it = receiver_items.begin(); it != receiver_items.end();) { const CFRecordType::TypeId receiver_id = it->receiver_id; SourceItems::iterator its = std::find_if(source_items.begin(), source_items.end(), boost::bind(&SourceItem::receiver_id, _1) == receiver_id || boost::bind(&SourceItem::receiver_id, _1) == rt_ANY_TYPE); if(its != source_items.end()) { if(NULL != it->fn) { it->fn(*this, it->data_place, its->data); // receiver_items and source_items may be expanded here. } else { seekFromBegin(it->data_place); write(&its->data, it->data_size); } receiver_items.erase(++it); source_items.erase(its); continue; } ++it; } seekToEnd(); }
static void GetDstFileSize(void){ unsigned char ebmpHeaderSize[4] = {0}; unsigned long maskFileOffset = _4bytesToULong(bmpHeader.fileSize); seekFromBegin(srcFile, maskFileOffset); readFile(srcFile, 4, ebmpHeaderSize); srcSize = fileSize(srcFile); dstSize = srcSize - maskFileOffset - _4bytesToULong(ebmpHeaderSize); }
static unsigned long JudgeEBmpValidity(void){ seekFromBegin(srcFile, 0); readFile(srcFile, sizeof(bmpHeader), &bmpHeader); if(!IsEBmpFile(&bmpHeader)){ EXIT(ERR_NOT_A_EBMP); } return 0; }
static void SaveCarryFile(char* hashPwd){ unsigned char temp = 0; unsigned long loop = 0; seekFromBegin(srcFile, (srcSize - dstSize)); for(loop = 0; loop < dstSize; loop++){ readFile(srcFile, 1, &temp); if(NULL != hashPwd){ temp -= hashPwd[loop % HASH_PWD_LEN]; } writeBuffToFile(&temp, 1, dstFile); } }