rlm@1: // InStreamWithCRC.cpp rlm@1: rlm@1: #include "StdAfx.h" rlm@1: rlm@1: #include "InStreamWithCRC.h" rlm@1: rlm@1: STDMETHODIMP CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) rlm@1: { rlm@1: UInt32 realProcessedSize; rlm@1: HRESULT result = _stream->Read(data, size, &realProcessedSize); rlm@1: _size += realProcessedSize; rlm@1: if (size > 0 && realProcessedSize == 0) rlm@1: _wasFinished = true; rlm@1: _crc = CrcUpdate(_crc, data, realProcessedSize); rlm@1: if(processedSize != NULL) rlm@1: *processedSize = realProcessedSize; rlm@1: return result; rlm@1: } rlm@1: rlm@1: STDMETHODIMP CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) rlm@1: { rlm@1: UInt32 realProcessedSize; rlm@1: HRESULT result = _stream->Read(data, size, &realProcessedSize); rlm@1: if (size > 0 && realProcessedSize == 0) rlm@1: _wasFinished = true; rlm@1: _size += realProcessedSize; rlm@1: _crc = CrcUpdate(_crc, data, realProcessedSize); rlm@1: if(processedSize != NULL) rlm@1: *processedSize = realProcessedSize; rlm@1: return result; rlm@1: } rlm@1: rlm@1: STDMETHODIMP CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) rlm@1: { rlm@1: if (seekOrigin != STREAM_SEEK_SET || offset != 0) rlm@1: return E_FAIL; rlm@1: _size = 0; rlm@1: _crc = CRC_INIT_VAL; rlm@1: return _stream->Seek(offset, seekOrigin, newPosition); rlm@1: }