"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "CPP/7zip/Archive/7z/7zIn.cpp" between
p7zip_15.14.1_src_all.tar.gz and p7zip_16.02_src_all.tar.gz

About: p7zip is a command-line file archiver with a high compression ratio (a port of the Windows program 7za.exe).

7zIn.cpp  (p7zip_15.14.1_src_all):7zIn.cpp  (p7zip_16.02_src_all)
skipping to change at line 96 skipping to change at line 96
{ {
Set(archive, byteBuffer, byteBuffer.Size(), false); Set(archive, byteBuffer, byteBuffer.Size(), false);
} }
void CStreamSwitch::Set(CInArchive *archive, const CObjectVector<CByteBuffer> *d ataVector) void CStreamSwitch::Set(CInArchive *archive, const CObjectVector<CByteBuffer> *d ataVector)
{ {
Remove(); Remove();
Byte external = archive->ReadByte(); Byte external = archive->ReadByte();
if (external != 0) if (external != 0)
{ {
if (!dataVector)
ThrowIncorrect();
CNum dataIndex = archive->ReadNum(); CNum dataIndex = archive->ReadNum();
if (dataIndex >= dataVector->Size()) if (dataIndex >= dataVector->Size())
ThrowIncorrect(); ThrowIncorrect();
Set(archive, (*dataVector)[dataIndex]); Set(archive, (*dataVector)[dataIndex]);
} }
} }
void CInArchive::AddByteStream(const Byte *buf, size_t size) void CInArchive::AddByteStream(const Byte *buf, size_t size)
{ {
if (_numInByteBufs == kNumBufLevelsMax) if (_numInByteBufs == kNumBufLevelsMax)
skipping to change at line 762 skipping to change at line 764
break; break;
} }
if (i == numCoders) if (i == numCoders)
ThrowUnsupported(); ThrowUnsupported();
} }
folders.FoToCoderUnpackSizes[fo] = numCodersOutStreams; folders.FoToCoderUnpackSizes[fo] = numCodersOutStreams;
numCodersOutStreams += numCoders; numCodersOutStreams += numCoders;
folders.FoStartPackStreamIndex[fo] = packStreamIndex; folders.FoStartPackStreamIndex[fo] = packStreamIndex;
if (numPackStreams > folders.NumPackStreams - packStreamIndex)
ThrowIncorrect();
packStreamIndex += numPackStreams; packStreamIndex += numPackStreams;
folders.FoToMainUnpackSizeIndex[fo] = (Byte)indexOfMainStream; folders.FoToMainUnpackSizeIndex[fo] = (Byte)indexOfMainStream;
} }
size_t dataSize = _inByteBack->GetPtr() - startBufPtr; size_t dataSize = _inByteBack->GetPtr() - startBufPtr;
folders.FoToCoderUnpackSizes[fo] = numCodersOutStreams; folders.FoToCoderUnpackSizes[fo] = numCodersOutStreams;
folders.FoStartPackStreamIndex[fo] = packStreamIndex; folders.FoStartPackStreamIndex[fo] = packStreamIndex;
folders.FoCodersDataOffset[fo] = _inByteBack->GetPtr() - startBufPtr; folders.FoCodersDataOffset[fo] = _inByteBack->GetPtr() - startBufPtr;
folders.CodersData.CopyFrom(startBufPtr, dataSize); folders.CodersData.CopyFrom(startBufPtr, dataSize);
// if (folders.NumPackStreams != packStreamIndex) ThrowUnsupported();
} }
WaitId(NID::kCodersUnpackSize); WaitId(NID::kCodersUnpackSize);
folders.CoderUnpackSizes.Alloc(numCodersOutStreams); folders.CoderUnpackSizes.Alloc(numCodersOutStreams);
for (CNum i = 0; i < numCodersOutStreams; i++) for (CNum i = 0; i < numCodersOutStreams; i++)
folders.CoderUnpackSizes[i] = ReadNumber(); folders.CoderUnpackSizes[i] = ReadNumber();
for (;;) for (;;)
{ {
UInt64 type = ReadID(); UInt64 type = ReadID();
skipping to change at line 1145 skipping to change at line 1151
digests); digests);
db.ArcInfo.DataStartPosition += db.ArcInfo.StartPositionAfterHeader; db.ArcInfo.DataStartPosition += db.ArcInfo.StartPositionAfterHeader;
type = ReadID(); type = ReadID();
} }
db.Files.Clear(); db.Files.Clear();
if (type == NID::kFilesInfo) if (type == NID::kFilesInfo)
{ {
CNum numFiles = ReadNum(); const CNum numFiles = ReadNum();
db.Files.ClearAndSetSize(numFiles); db.Files.ClearAndSetSize(numFiles);
CNum i;
/* /*
db.Files.Reserve(numFiles); db.Files.Reserve(numFiles);
CNum i; CNum i;
for (i = 0; i < numFiles; i++) for (i = 0; i < numFiles; i++)
db.Files.Add(CFileItem()); db.Files.Add(CFileItem());
*/ */
db.ArcInfo.FileInfoPopIDs.Add(NID::kSize); db.ArcInfo.FileInfoPopIDs.Add(NID::kSize);
// if (!db.PackSizes.IsEmpty()) // if (!db.PackSizes.IsEmpty())
db.ArcInfo.FileInfoPopIDs.Add(NID::kPackInfo); db.ArcInfo.FileInfoPopIDs.Add(NID::kPackInfo);
skipping to change at line 1169 skipping to change at line 1174
db.ArcInfo.FileInfoPopIDs.Add(NID::kCRC); db.ArcInfo.FileInfoPopIDs.Add(NID::kCRC);
CBoolVector emptyStreamVector; CBoolVector emptyStreamVector;
BoolVector_Fill_False(emptyStreamVector, (unsigned)numFiles); BoolVector_Fill_False(emptyStreamVector, (unsigned)numFiles);
CBoolVector emptyFileVector; CBoolVector emptyFileVector;
CBoolVector antiFileVector; CBoolVector antiFileVector;
CNum numEmptyStreams = 0; CNum numEmptyStreams = 0;
for (;;) for (;;)
{ {
UInt64 type = ReadID(); const UInt64 type2 = ReadID();
if (type == NID::kEnd) if (type2 == NID::kEnd)
break; break;
UInt64 size = ReadNumber(); UInt64 size = ReadNumber();
if (size > _inByteBack->GetRem()) if (size > _inByteBack->GetRem())
ThrowIncorrect(); ThrowIncorrect();
CStreamSwitch switchProp; CStreamSwitch switchProp;
switchProp.Set(this, _inByteBack->GetPtr(), (size_t)size, true); switchProp.Set(this, _inByteBack->GetPtr(), (size_t)size, true);
bool addPropIdToList = true; bool addPropIdToList = true;
bool isKnownType = true; bool isKnownType = true;
if (type > ((UInt32)1 << 30)) if (type2 > ((UInt32)1 << 30))
isKnownType = false; isKnownType = false;
else switch ((UInt32)type) else switch ((UInt32)type2)
{ {
case NID::kName: case NID::kName:
{ {
CStreamSwitch streamSwitch; CStreamSwitch streamSwitch;
streamSwitch.Set(this, &dataVector); streamSwitch.Set(this, &dataVector);
size_t rem = _inByteBack->GetRem(); size_t rem = _inByteBack->GetRem();
db.NamesBuf.Alloc(rem); db.NamesBuf.Alloc(rem);
ReadBytes(db.NamesBuf, rem); ReadBytes(db.NamesBuf, rem);
db.NameOffsets.Alloc(db.Files.Size() + 1); db.NameOffsets.Alloc(db.Files.Size() + 1);
size_t pos = 0; size_t pos = 0;
skipping to change at line 1215 skipping to change at line 1220
if (pos != rem) if (pos != rem)
ThereIsHeaderError = true; ThereIsHeaderError = true;
break; break;
} }
case NID::kWinAttrib: case NID::kWinAttrib:
{ {
CBoolVector boolVector; CBoolVector boolVector;
ReadBoolVector2(db.Files.Size(), boolVector); ReadBoolVector2(db.Files.Size(), boolVector);
CStreamSwitch streamSwitch; CStreamSwitch streamSwitch;
streamSwitch.Set(this, &dataVector); streamSwitch.Set(this, &dataVector);
for (i = 0; i < numFiles; i++) for (CNum i = 0; i < numFiles; i++)
{ {
CFileItem &file = db.Files[i]; CFileItem &file = db.Files[i];
file.AttribDefined = boolVector[i]; file.AttribDefined = boolVector[i];
if (file.AttribDefined) if (file.AttribDefined)
file.Attrib = ReadUInt32(); file.Attrib = ReadUInt32();
} }
break; break;
} }
/* /*
case NID::kIsAux: case NID::kIsAux:
skipping to change at line 1258 skipping to change at line 1263
if (file.IsAltStream) if (file.IsAltStream)
db.ThereAreAltStreams = true; db.ThereAreAltStreams = true;
} }
break; break;
} }
*/ */
case NID::kEmptyStream: case NID::kEmptyStream:
{ {
ReadBoolVector(numFiles, emptyStreamVector); ReadBoolVector(numFiles, emptyStreamVector);
numEmptyStreams = 0; numEmptyStreams = 0;
for (i = 0; i < (CNum)emptyStreamVector.Size(); i++) for (CNum i = 0; i < (CNum)emptyStreamVector.Size(); i++)
if (emptyStreamVector[i]) if (emptyStreamVector[i])
numEmptyStreams++; numEmptyStreams++;
BoolVector_Fill_False(emptyFileVector, numEmptyStreams); BoolVector_Fill_False(emptyFileVector, numEmptyStreams);
BoolVector_Fill_False(antiFileVector, numEmptyStreams); BoolVector_Fill_False(antiFileVector, numEmptyStreams);
break; break;
} }
case NID::kEmptyFile: ReadBoolVector(numEmptyStreams, emptyFileVector); b reak; case NID::kEmptyFile: ReadBoolVector(numEmptyStreams, emptyFileVector); b reak;
case NID::kAnti: ReadBoolVector(numEmptyStreams, antiFileVector); break; case NID::kAnti: ReadBoolVector(numEmptyStreams, antiFileVector); break;
skipping to change at line 1332 skipping to change at line 1337
} }
break; break;
} }
*/ */
default: default:
addPropIdToList = isKnownType = false; addPropIdToList = isKnownType = false;
} }
if (isKnownType) if (isKnownType)
{ {
if (addPropIdToList) if (addPropIdToList)
db.ArcInfo.FileInfoPopIDs.Add(type); db.ArcInfo.FileInfoPopIDs.Add(type2);
} }
else else
{ {
db.UnsupportedFeatureWarning = true; db.UnsupportedFeatureWarning = true;
_inByteBack->SkipRem(); _inByteBack->SkipRem();
} }
// SkipData worked incorrectly in some versions before v4.59 (7zVer <= 0.02) // SkipData worked incorrectly in some versions before v4.59 (7zVer <= 0.02)
if (_inByteBack->GetRem() != 0) if (_inByteBack->GetRem() != 0)
ThrowIncorrect(); ThrowIncorrect();
} }
type = ReadID(); // Read (NID::kEnd) end of headers type = ReadID(); // Read (NID::kEnd) end of headers
if (numFiles - numEmptyStreams != unpackSizes.Size()) if (numFiles - numEmptyStreams != unpackSizes.Size())
ThrowUnsupported(); ThrowUnsupported();
CNum emptyFileIndex = 0; CNum emptyFileIndex = 0;
CNum sizeIndex = 0; CNum sizeIndex = 0;
CNum numAntiItems = 0; CNum numAntiItems = 0;
CNum i;
for (i = 0; i < numEmptyStreams; i++) for (i = 0; i < numEmptyStreams; i++)
if (antiFileVector[i]) if (antiFileVector[i])
numAntiItems++; numAntiItems++;
for (i = 0; i < numFiles; i++) for (i = 0; i < numFiles; i++)
{ {
CFileItem &file = db.Files[i]; CFileItem &file = db.Files[i];
bool isAnti; bool isAnti;
file.HasStream = !emptyStreamVector[i]; file.HasStream = !emptyStreamVector[i];
file.Crc = 0; file.Crc = 0;
 End of changes. 12 change blocks. 
9 lines changed or deleted 17 lines changed or added

Home  |  About  |  All  |  Newest  |  Fossies Dox  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTPS