xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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