1*f6dc9357SAndroid Build Coastguard Worker // InStreamWithCRC.cpp
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "InStreamWithCRC.h"
6*f6dc9357SAndroid Build Coastguard Worker
Z7_COM7F_IMF(CSequentialInStreamWithCRC::Read (void * data,UInt32 size,UInt32 * processedSize))7*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize))
8*f6dc9357SAndroid Build Coastguard Worker {
9*f6dc9357SAndroid Build Coastguard Worker UInt32 realProcessed = 0;
10*f6dc9357SAndroid Build Coastguard Worker HRESULT result = S_OK;
11*f6dc9357SAndroid Build Coastguard Worker if (size != 0)
12*f6dc9357SAndroid Build Coastguard Worker {
13*f6dc9357SAndroid Build Coastguard Worker if (_stream)
14*f6dc9357SAndroid Build Coastguard Worker result = _stream->Read(data, size, &realProcessed);
15*f6dc9357SAndroid Build Coastguard Worker _size += realProcessed;
16*f6dc9357SAndroid Build Coastguard Worker if (realProcessed == 0)
17*f6dc9357SAndroid Build Coastguard Worker _wasFinished = true;
18*f6dc9357SAndroid Build Coastguard Worker else
19*f6dc9357SAndroid Build Coastguard Worker _crc = CrcUpdate(_crc, data, realProcessed);
20*f6dc9357SAndroid Build Coastguard Worker }
21*f6dc9357SAndroid Build Coastguard Worker if (processedSize)
22*f6dc9357SAndroid Build Coastguard Worker *processedSize = realProcessed;
23*f6dc9357SAndroid Build Coastguard Worker return result;
24*f6dc9357SAndroid Build Coastguard Worker }
25*f6dc9357SAndroid Build Coastguard Worker
Z7_COM7F_IMF(CSequentialInStreamWithCRC::GetSize (UInt64 * size))26*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CSequentialInStreamWithCRC::GetSize(UInt64 *size))
27*f6dc9357SAndroid Build Coastguard Worker {
28*f6dc9357SAndroid Build Coastguard Worker *size = _fullSize;
29*f6dc9357SAndroid Build Coastguard Worker return S_OK;
30*f6dc9357SAndroid Build Coastguard Worker }
31*f6dc9357SAndroid Build Coastguard Worker
32*f6dc9357SAndroid Build Coastguard Worker
Z7_COM7F_IMF(CInStreamWithCRC::Read (void * data,UInt32 size,UInt32 * processedSize))33*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize))
34*f6dc9357SAndroid Build Coastguard Worker {
35*f6dc9357SAndroid Build Coastguard Worker UInt32 realProcessed = 0;
36*f6dc9357SAndroid Build Coastguard Worker HRESULT result = S_OK;
37*f6dc9357SAndroid Build Coastguard Worker if (_stream)
38*f6dc9357SAndroid Build Coastguard Worker result = _stream->Read(data, size, &realProcessed);
39*f6dc9357SAndroid Build Coastguard Worker _size += realProcessed;
40*f6dc9357SAndroid Build Coastguard Worker /*
41*f6dc9357SAndroid Build Coastguard Worker if (size != 0 && realProcessed == 0)
42*f6dc9357SAndroid Build Coastguard Worker _wasFinished = true;
43*f6dc9357SAndroid Build Coastguard Worker */
44*f6dc9357SAndroid Build Coastguard Worker _crc = CrcUpdate(_crc, data, realProcessed);
45*f6dc9357SAndroid Build Coastguard Worker if (processedSize)
46*f6dc9357SAndroid Build Coastguard Worker *processedSize = realProcessed;
47*f6dc9357SAndroid Build Coastguard Worker return result;
48*f6dc9357SAndroid Build Coastguard Worker }
49*f6dc9357SAndroid Build Coastguard Worker
Z7_COM7F_IMF(CInStreamWithCRC::Seek (Int64 offset,UInt32 seekOrigin,UInt64 * newPosition))50*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition))
51*f6dc9357SAndroid Build Coastguard Worker {
52*f6dc9357SAndroid Build Coastguard Worker if (seekOrigin != STREAM_SEEK_SET || offset != 0)
53*f6dc9357SAndroid Build Coastguard Worker return E_FAIL;
54*f6dc9357SAndroid Build Coastguard Worker _size = 0;
55*f6dc9357SAndroid Build Coastguard Worker _crc = CRC_INIT_VAL;
56*f6dc9357SAndroid Build Coastguard Worker return _stream->Seek(offset, seekOrigin, newPosition);
57*f6dc9357SAndroid Build Coastguard Worker }
58