MCPcopy Create free account
hub / github.com/abbeycode/UnrarKit / ReadHeader14

Method ReadHeader14

Libraries/unrar/arcread.cpp:1200–1272  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1198
1199#ifndef SFX_MODULE
1200size_t Archive::ReadHeader14()
1201{
1202 RawRead Raw(this);
1203 if (CurBlockPos<=(int64)SFXSize)
1204 {
1205 Raw.Read(SIZEOF_MAINHEAD14);
1206 MainHead.Reset();
1207 byte Mark[4];
1208 Raw.GetB(Mark,4);
1209 uint HeadSize=Raw.Get2();
1210 if (HeadSize<7)
1211 return false;
1212 byte Flags=Raw.Get1();
1213 NextBlockPos=CurBlockPos+HeadSize;
1214 CurHeaderType=HEAD_MAIN;
1215
1216 Volume=(Flags & MHD_VOLUME)!=0;
1217 Solid=(Flags & MHD_SOLID)!=0;
1218 Locked=(Flags & MHD_LOCK)!=0;
1219 MainHead.CommentInHeader=(Flags & MHD_COMMENT)!=0;
1220 MainHead.PackComment=(Flags & MHD_PACK_COMMENT)!=0;
1221 }
1222 else
1223 {
1224 Raw.Read(SIZEOF_FILEHEAD14);
1225 FileHead.Reset();
1226
1227 FileHead.HeaderType=HEAD_FILE;
1228 FileHead.DataSize=Raw.Get4();
1229 FileHead.UnpSize=Raw.Get4();
1230 FileHead.FileHash.Type=HASH_RAR14;
1231 FileHead.FileHash.CRC32=Raw.Get2();
1232 FileHead.HeadSize=Raw.Get2();
1233 if (FileHead.HeadSize<21)
1234 return false;
1235 uint FileTime=Raw.Get4();
1236 FileHead.FileAttr=Raw.Get1();
1237 FileHead.Flags=Raw.Get1()|LONG_BLOCK;
1238 FileHead.UnpVer=(Raw.Get1()==2) ? 13 : 10;
1239 size_t NameSize=Raw.Get1();
1240 FileHead.Method=Raw.Get1();
1241
1242 FileHead.SplitBefore=(FileHead.Flags & LHD_SPLIT_BEFORE)!=0;
1243 FileHead.SplitAfter=(FileHead.Flags & LHD_SPLIT_AFTER)!=0;
1244 FileHead.Encrypted=(FileHead.Flags & LHD_PASSWORD)!=0;
1245 FileHead.CryptMethod=FileHead.Encrypted ? CRYPT_RAR13:CRYPT_NONE;
1246
1247 FileHead.PackSize=FileHead.DataSize;
1248 FileHead.WinSize=0x10000;
1249 FileHead.Dir=(FileHead.FileAttr & 0x10)!=0;
1250
1251 FileHead.HostOS=HOST_MSDOS;
1252 FileHead.HSType=HSYS_WINDOWS;
1253
1254 FileHead.mtime.SetDos(FileTime);
1255
1256 Raw.Read(NameSize);
1257

Callers

nothing calls this directly

Calls 10

IntToExtFunction · 0.85
CharToWideFunction · 0.85
GetBMethod · 0.80
Get2Method · 0.80
Get1Method · 0.80
Get4Method · 0.80
SetDosMethod · 0.80
ReadMethod · 0.45
ResetMethod · 0.45
SizeMethod · 0.45

Tested by

no test coverage detected