InStreamWithCRC.cpp 1.1 KB

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