1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// InStreamWithCRC.cpp 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "StdAfx.h" 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "InStreamWithCRC.h" 6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 7baa3858d3f5d128a5c8466b700098109edcad5f2repo syncSTDMETHODIMP CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) 8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 realProcessedSize; 10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HRESULT result = _stream->Read(data, size, &realProcessedSize); 11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _size += realProcessedSize; 12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (size > 0 && realProcessedSize == 0) 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _wasFinished = true; 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _crc = CrcUpdate(_crc, data, realProcessedSize); 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if(processedSize != NULL) 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync *processedSize = realProcessedSize; 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return result; 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 20baa3858d3f5d128a5c8466b700098109edcad5f2repo syncSTDMETHODIMP CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 realProcessedSize; 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HRESULT result = _stream->Read(data, size, &realProcessedSize); 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync /* 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (size > 0 && realProcessedSize == 0) 26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _wasFinished = true; 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync */ 28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _size += realProcessedSize; 29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _crc = CrcUpdate(_crc, data, realProcessedSize); 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if(processedSize != NULL) 31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync *processedSize = realProcessedSize; 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return result; 33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 35baa3858d3f5d128a5c8466b700098109edcad5f2repo syncSTDMETHODIMP CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (seekOrigin != STREAM_SEEK_SET || offset != 0) 38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return E_FAIL; 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _size = 0; 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _crc = CRC_INIT_VAL; 41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return _stream->Seek(offset, seekOrigin, newPosition); 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 43