internal T PromoteHeader<T>(RarCrcBinaryReader reader) where T : RarHeader, new() { T header = new T(); header.FillBase(this); reader.Mark(); header.ReadFromReader(reader); header.ReadBytes += reader.CurrentReadByteCount; int headerSizeDiff = header.HeaderSize - (int)header.ReadBytes; if (headerSizeDiff > 0) { reader.ReadBytes(headerSizeDiff); } VerifyHeaderCrc(reader.GetCrc()); return header; }
protected RarHeader(RarHeader header, RarCrcBinaryReader reader, HeaderType headerType) { _headerType = headerType; _isRar5 = header.IsRar5; HeaderCrc = header.HeaderCrc; HeaderCode = header.HeaderCode; HeaderFlags = header.HeaderFlags; HeaderSize = header.HeaderSize; ExtraSize = header.ExtraSize; AdditionalDataSize = header.AdditionalDataSize; ArchiveEncoding = header.ArchiveEncoding; ReadFinish(reader); int n = RemainingHeaderBytes(reader); if (n > 0) { reader.ReadBytes(n); } VerifyHeaderCrc(reader.GetCrc32()); }