WimHandlerOut.cpp (p7zip_15.14.1_src_all) | : | WimHandlerOut.cpp (p7zip_16.02_src_all) | ||
---|---|---|---|---|
skipping to change at line 1317 | skipping to change at line 1317 | |||
if (isUpdate) | if (isUpdate) | |||
{ | { | |||
const CHeader &srcHeader = _volumes[1].Header; | const CHeader &srcHeader = _volumes[1].Header; | |||
header.Flags = srcHeader.Flags; | header.Flags = srcHeader.Flags; | |||
header.Version = srcHeader.Version; | header.Version = srcHeader.Version; | |||
header.ChunkSize = srcHeader.ChunkSize; | header.ChunkSize = srcHeader.ChunkSize; | |||
header.ChunkSizeBits = srcHeader.ChunkSizeBits; | header.ChunkSizeBits = srcHeader.ChunkSizeBits; | |||
} | } | |||
Byte buf[kHeaderSizeMax]; | { | |||
header.WriteTo(buf); | Byte buf[kHeaderSizeMax]; | |||
RINOK(WriteStream(outStream, buf, kHeaderSizeMax)); | header.WriteTo(buf); | |||
RINOK(WriteStream(outStream, buf, kHeaderSizeMax)); | ||||
} | ||||
UInt64 curPos = kHeaderSizeMax; | UInt64 curPos = kHeaderSizeMax; | |||
CInStreamWithSha1 *inShaStreamSpec = new CInStreamWithSha1; | CInStreamWithSha1 *inShaStreamSpec = new CInStreamWithSha1; | |||
CMyComPtr<ISequentialInStream> inShaStream = inShaStreamSpec; | CMyComPtr<ISequentialInStream> inShaStream = inShaStreamSpec; | |||
CLimitedSequentialInStream *inStreamLimitedSpec = NULL; | CLimitedSequentialInStream *inStreamLimitedSpec = NULL; | |||
CMyComPtr<CLimitedSequentialInStream> inStreamLimited; | CMyComPtr<CLimitedSequentialInStream> inStreamLimited; | |||
if (_volumes.Size() == 2) | if (_volumes.Size() == 2) | |||
{ | { | |||
skipping to change at line 1716 | skipping to change at line 1718 | |||
if (secBufs.Size() == 0) | if (secBufs.Size() == 0) | |||
{ | { | |||
// we can write 0 here only if there is no security data, imageX does it, | // we can write 0 here only if there is no security data, imageX does it, | |||
// but some programs expect size = 8 | // but some programs expect size = 8 | |||
Set32((Byte *)meta, 8); // size of security data | Set32((Byte *)meta, 8); // size of security data | |||
// Set32((Byte *)meta, 0); | // Set32((Byte *)meta, 0); | |||
} | } | |||
else | else | |||
{ | { | |||
unsigned i; | unsigned k; | |||
for (i = 0; i < secBufs.Size(); i++, pos += 8) | for (k = 0; k < secBufs.Size(); k++, pos += 8) | |||
{ | { | |||
Set64(meta + pos, secBufs[i].Size()); | Set64(meta + pos, secBufs[k].Size()); | |||
} | } | |||
for (i = 0; i < secBufs.Size(); i++) | for (k = 0; k < secBufs.Size(); k++) | |||
{ | { | |||
const CByteBuffer &buf = secBufs[i]; | const CByteBuffer &buf = secBufs[k]; | |||
size_t size = buf.Size(); | size_t size = buf.Size(); | |||
if (size != 0) | if (size != 0) | |||
{ | { | |||
memcpy(meta + pos, buf, size); | memcpy(meta + pos, buf, size); | |||
pos += size; | pos += size; | |||
} | } | |||
} | } | |||
while ((pos & 7) != 0) | while ((pos & 7) != 0) | |||
meta[pos++] = 0; | meta[pos++] = 0; | |||
Set32((Byte *)meta, (UInt32)pos); // size of security data | Set32((Byte *)meta, (UInt32)pos); // size of security data | |||
skipping to change at line 1848 | skipping to change at line 1850 | |||
Set16((Byte *)xmlBuf + 2 + i * 2, utf16[i]); | Set16((Byte *)xmlBuf + 2 + i * 2, utf16[i]); | |||
RINOK(WriteStream(outStream, (const Byte *)xmlBuf, xmlSize)); | RINOK(WriteStream(outStream, (const Byte *)xmlBuf, xmlSize)); | |||
} | } | |||
header.XmlResource.UnpackSize = header.XmlResource.PackSize = xmlSize; | header.XmlResource.UnpackSize = header.XmlResource.PackSize = xmlSize; | |||
header.XmlResource.Offset = curPos; | header.XmlResource.Offset = curPos; | |||
header.XmlResource.Flags = NResourceFlags::kMetadata; | header.XmlResource.Flags = NResourceFlags::kMetadata; | |||
outStream->Seek(0, STREAM_SEEK_SET, NULL); | outStream->Seek(0, STREAM_SEEK_SET, NULL); | |||
header.NumImages = trees.Size(); | header.NumImages = trees.Size(); | |||
header.WriteTo(buf); | { | |||
return WriteStream(outStream, buf, kHeaderSizeMax); | Byte buf[kHeaderSizeMax]; | |||
header.WriteTo(buf); | ||||
return WriteStream(outStream, buf, kHeaderSizeMax); | ||||
} | ||||
COM_TRY_END | COM_TRY_END | |||
} | } | |||
}} | }} | |||
End of changes. 6 change blocks. | ||||
10 lines changed or deleted | 15 lines changed or added |