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