7zOut.cpp (p7zip_15.14.1_src_all) | : | 7zOut.cpp (p7zip_16.02_src_all) | ||
---|---|---|---|---|
skipping to change at line 543 | skipping to change at line 543 | |||
void COutArchive::WriteHeader( | void COutArchive::WriteHeader( | |||
const CArchiveDatabaseOut &db, | const CArchiveDatabaseOut &db, | |||
// const CHeaderOptions &headerOptions, | // const CHeaderOptions &headerOptions, | |||
UInt64 &headerOffset) | UInt64 &headerOffset) | |||
{ | { | |||
/* | /* | |||
bool thereIsSecure = (db.SecureBuf.Size() != 0); | bool thereIsSecure = (db.SecureBuf.Size() != 0); | |||
*/ | */ | |||
_useAlign = true; | _useAlign = true; | |||
unsigned i; | { | |||
UInt64 packSize = 0; | ||||
UInt64 packedSize = 0; | FOR_VECTOR (i, db.PackSizes) | |||
for (i = 0; i < db.PackSizes.Size(); i++) | packSize += db.PackSizes[i]; | |||
packedSize += db.PackSizes[i]; | headerOffset = packSize; | |||
} | ||||
headerOffset = packedSize; | ||||
WriteByte(NID::kHeader); | WriteByte(NID::kHeader); | |||
// Archive Properties | // Archive Properties | |||
if (db.Folders.Size() > 0) | if (db.Folders.Size() > 0) | |||
{ | { | |||
WriteByte(NID::kMainStreamsInfo); | WriteByte(NID::kMainStreamsInfo); | |||
WritePackInfo(0, db.PackSizes, db.PackCRCs); | WritePackInfo(0, db.PackSizes, db.PackCRCs); | |||
WriteUnpackInfo(db.Folders, (const COutFolders &)db); | WriteUnpackInfo(db.Folders, (const COutFolders &)db); | |||
CRecordVector<UInt64> unpackSizes; | CRecordVector<UInt64> unpackSizes; | |||
CUInt32DefVector digests; | CUInt32DefVector digests; | |||
for (i = 0; i < db.Files.Size(); i++) | FOR_VECTOR (i, db.Files) | |||
{ | { | |||
const CFileItem &file = db.Files[i]; | const CFileItem &file = db.Files[i]; | |||
if (!file.HasStream) | if (!file.HasStream) | |||
continue; | continue; | |||
unpackSizes.Add(file.Size); | unpackSizes.Add(file.Size); | |||
digests.Defs.Add(file.CrcDefined); | digests.Defs.Add(file.CrcDefined); | |||
digests.Vals.Add(file.Crc); | digests.Vals.Add(file.Crc); | |||
} | } | |||
WriteSubStreamsInfo(db.Folders, (const COutFolders &)db, unpackSizes, digest s); | WriteSubStreamsInfo(db.Folders, (const COutFolders &)db, unpackSizes, digest s); | |||
skipping to change at line 591 | skipping to change at line 590 | |||
} | } | |||
WriteByte(NID::kFilesInfo); | WriteByte(NID::kFilesInfo); | |||
WriteNumber(db.Files.Size()); | WriteNumber(db.Files.Size()); | |||
{ | { | |||
/* ---------- Empty Streams ---------- */ | /* ---------- Empty Streams ---------- */ | |||
CBoolVector emptyStreamVector; | CBoolVector emptyStreamVector; | |||
emptyStreamVector.ClearAndSetSize(db.Files.Size()); | emptyStreamVector.ClearAndSetSize(db.Files.Size()); | |||
unsigned numEmptyStreams = 0; | unsigned numEmptyStreams = 0; | |||
for (i = 0; i < db.Files.Size(); i++) | { | |||
if (db.Files[i].HasStream) | FOR_VECTOR (i, db.Files) | |||
emptyStreamVector[i] = false; | if (db.Files[i].HasStream) | |||
else | emptyStreamVector[i] = false; | |||
{ | else | |||
emptyStreamVector[i] = true; | { | |||
numEmptyStreams++; | emptyStreamVector[i] = true; | |||
} | numEmptyStreams++; | |||
} | ||||
} | ||||
if (numEmptyStreams != 0) | if (numEmptyStreams != 0) | |||
{ | { | |||
WritePropBoolVector(NID::kEmptyStream, emptyStreamVector); | WritePropBoolVector(NID::kEmptyStream, emptyStreamVector); | |||
CBoolVector emptyFileVector, antiVector; | CBoolVector emptyFileVector, antiVector; | |||
emptyFileVector.ClearAndSetSize(numEmptyStreams); | emptyFileVector.ClearAndSetSize(numEmptyStreams); | |||
antiVector.ClearAndSetSize(numEmptyStreams); | antiVector.ClearAndSetSize(numEmptyStreams); | |||
bool thereAreEmptyFiles = false, thereAreAntiItems = false; | bool thereAreEmptyFiles = false, thereAreAntiItems = false; | |||
unsigned cur = 0; | unsigned cur = 0; | |||
for (i = 0; i < db.Files.Size(); i++) | ||||
FOR_VECTOR (i, db.Files) | ||||
{ | { | |||
const CFileItem &file = db.Files[i]; | const CFileItem &file = db.Files[i]; | |||
if (file.HasStream) | if (file.HasStream) | |||
continue; | continue; | |||
emptyFileVector[cur] = !file.IsDir; | emptyFileVector[cur] = !file.IsDir; | |||
if (!file.IsDir) | if (!file.IsDir) | |||
thereAreEmptyFiles = true; | thereAreEmptyFiles = true; | |||
bool isAnti = db.IsItemAnti(i); | bool isAnti = db.IsItemAnti(i); | |||
antiVector[cur] = isAnti; | antiVector[cur] = isAnti; | |||
if (isAnti) | if (isAnti) | |||
skipping to change at line 674 | skipping to change at line 677 | |||
/* if (headerOptions.WriteCTime) */ WriteUInt64DefVector(db.CTime, NID::kCTime ); | /* if (headerOptions.WriteCTime) */ WriteUInt64DefVector(db.CTime, NID::kCTime ); | |||
/* if (headerOptions.WriteATime) */ WriteUInt64DefVector(db.ATime, NID::kATime ); | /* if (headerOptions.WriteATime) */ WriteUInt64DefVector(db.ATime, NID::kATime ); | |||
/* if (headerOptions.WriteMTime) */ WriteUInt64DefVector(db.MTime, NID::kMTime ); | /* if (headerOptions.WriteMTime) */ WriteUInt64DefVector(db.MTime, NID::kMTime ); | |||
WriteUInt64DefVector(db.StartPos, NID::kStartPos); | WriteUInt64DefVector(db.StartPos, NID::kStartPos); | |||
{ | { | |||
/* ---------- Write Attrib ---------- */ | /* ---------- Write Attrib ---------- */ | |||
CBoolVector boolVector; | CBoolVector boolVector; | |||
boolVector.ClearAndSetSize(db.Files.Size()); | boolVector.ClearAndSetSize(db.Files.Size()); | |||
unsigned numDefined = 0; | unsigned numDefined = 0; | |||
for (i = 0; i < db.Files.Size(); i++) | ||||
{ | { | |||
bool defined = db.Files[i].AttribDefined; | FOR_VECTOR (i, db.Files) | |||
boolVector[i] = defined; | { | |||
if (defined) | bool defined = db.Files[i].AttribDefined; | |||
numDefined++; | boolVector[i] = defined; | |||
if (defined) | ||||
numDefined++; | ||||
} | ||||
} | } | |||
if (numDefined != 0) | if (numDefined != 0) | |||
{ | { | |||
WriteAlignedBoolHeader(boolVector, numDefined, NID::kWinAttrib, 4); | WriteAlignedBoolHeader(boolVector, numDefined, NID::kWinAttrib, 4); | |||
for (i = 0; i < db.Files.Size(); i++) | FOR_VECTOR (i, db.Files) | |||
{ | { | |||
const CFileItem &file = db.Files[i]; | const CFileItem &file = db.Files[i]; | |||
if (file.AttribDefined) | if (file.AttribDefined) | |||
WriteUInt32(file.Attrib); | WriteUInt32(file.Attrib); | |||
} | } | |||
} | } | |||
} | } | |||
/* | /* | |||
{ | { | |||
End of changes. 8 change blocks. | ||||
23 lines changed or deleted | 30 lines changed or added |