#include "rar.hpp" RawRead::RawRead(File *SrcFile) { RawRead::SrcFile=SrcFile; ReadPos=0; DataSize=0; #ifndef SHELL_EXT Crypt=NULL; #endif } void RawRead::Read(size_t Size) { #if !defined(SHELL_EXT) && !defined(NOCRYPT) if (Crypt!=NULL) { size_t CurSize=Data.Size(); size_t SizeToRead=Size-(CurSize-DataSize); if (SizeToRead>0) { size_t AlignedReadSize=SizeToRead+((~SizeToRead+1)&0xf); Data.Add(AlignedReadSize); size_t ReadSize=SrcFile->Read(&Data[CurSize],AlignedReadSize); Crypt->DecryptBlock(&Data[CurSize],AlignedReadSize); DataSize+=ReadSize==0 ? 0:Size; } else DataSize+=Size; } else #endif if (Size!=0) { Data.Add(Size); DataSize+=SrcFile->Read(&Data[DataSize],Size); } } void RawRead::Read(byte *SrcData,size_t Size) { if (Size!=0) { Data.Add(Size); memcpy(&Data[DataSize],SrcData,Size); DataSize+=Size; } } void RawRead::Get(byte &Field) { if (ReadPos2 ? CRC(0xffffffff,&Data[2],(ProcessedOnly ? ReadPos:DataSize)-2):0xffffffff); }