1370b324cSopenharmony_ci// InStreamWithCRC.cpp 2370b324cSopenharmony_ci 3370b324cSopenharmony_ci#include "StdAfx.h" 4370b324cSopenharmony_ci 5370b324cSopenharmony_ci#include "InStreamWithCRC.h" 6370b324cSopenharmony_ci 7370b324cSopenharmony_ciZ7_COM7F_IMF(CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize)) 8370b324cSopenharmony_ci{ 9370b324cSopenharmony_ci UInt32 realProcessed = 0; 10370b324cSopenharmony_ci HRESULT result = S_OK; 11370b324cSopenharmony_ci if (size != 0) 12370b324cSopenharmony_ci { 13370b324cSopenharmony_ci if (_stream) 14370b324cSopenharmony_ci result = _stream->Read(data, size, &realProcessed); 15370b324cSopenharmony_ci _size += realProcessed; 16370b324cSopenharmony_ci if (realProcessed == 0) 17370b324cSopenharmony_ci _wasFinished = true; 18370b324cSopenharmony_ci else 19370b324cSopenharmony_ci _crc = CrcUpdate(_crc, data, realProcessed); 20370b324cSopenharmony_ci } 21370b324cSopenharmony_ci if (processedSize) 22370b324cSopenharmony_ci *processedSize = realProcessed; 23370b324cSopenharmony_ci return result; 24370b324cSopenharmony_ci} 25370b324cSopenharmony_ci 26370b324cSopenharmony_ciZ7_COM7F_IMF(CSequentialInStreamWithCRC::GetSize(UInt64 *size)) 27370b324cSopenharmony_ci{ 28370b324cSopenharmony_ci *size = _fullSize; 29370b324cSopenharmony_ci return S_OK; 30370b324cSopenharmony_ci} 31370b324cSopenharmony_ci 32370b324cSopenharmony_ci 33370b324cSopenharmony_ciZ7_COM7F_IMF(CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize)) 34370b324cSopenharmony_ci{ 35370b324cSopenharmony_ci UInt32 realProcessed = 0; 36370b324cSopenharmony_ci HRESULT result = S_OK; 37370b324cSopenharmony_ci if (_stream) 38370b324cSopenharmony_ci result = _stream->Read(data, size, &realProcessed); 39370b324cSopenharmony_ci _size += realProcessed; 40370b324cSopenharmony_ci /* 41370b324cSopenharmony_ci if (size != 0 && realProcessed == 0) 42370b324cSopenharmony_ci _wasFinished = true; 43370b324cSopenharmony_ci */ 44370b324cSopenharmony_ci _crc = CrcUpdate(_crc, data, realProcessed); 45370b324cSopenharmony_ci if (processedSize) 46370b324cSopenharmony_ci *processedSize = realProcessed; 47370b324cSopenharmony_ci return result; 48370b324cSopenharmony_ci} 49370b324cSopenharmony_ci 50370b324cSopenharmony_ciZ7_COM7F_IMF(CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)) 51370b324cSopenharmony_ci{ 52370b324cSopenharmony_ci if (seekOrigin != STREAM_SEEK_SET || offset != 0) 53370b324cSopenharmony_ci return E_FAIL; 54370b324cSopenharmony_ci _size = 0; 55370b324cSopenharmony_ci _crc = CRC_INIT_VAL; 56370b324cSopenharmony_ci return _stream->Seek(offset, seekOrigin, newPosition); 57370b324cSopenharmony_ci} 58