diff options
Diffstat (limited to '3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp')
-rw-r--r-- | 3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp index c21db3b2a63..e6eabcf148e 100644 --- a/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +++ b/3rdparty/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp @@ -14,32 +14,41 @@ void UpdateProduce( CRecordVector<CUpdatePair2> &operationChain, IUpdateProduceCallback *callback) { - for (int i = 0; i < updatePairs.Size(); i++) + FOR_VECTOR (i, updatePairs) { const CUpdatePair &pair = updatePairs[i]; CUpdatePair2 up2; - up2.IsAnti = false; up2.DirIndex = pair.DirIndex; up2.ArcIndex = pair.ArcIndex; up2.NewData = up2.NewProps = true; + up2.UseArcProps = false; - switch(actionSet.StateActions[pair.State]) + switch (actionSet.StateActions[(unsigned)pair.State]) { case NPairAction::kIgnore: - /* - if (pair.State != NPairState::kOnlyOnDisk) - IgnoreArchiveItem(m_ArchiveItems[pair.ArcIndex]); - // cout << "deleting"; - */ - if (callback) + if (pair.ArcIndex >= 0 && callback) callback->ShowDeleteFile(pair.ArcIndex); continue; case NPairAction::kCopy: if (pair.State == NPairState::kOnlyOnDisk) throw kUpdateActionSetCollision; + if (pair.State == NPairState::kOnlyInArchive) + { + if (pair.HostIndex >= 0) + { + /* + ignore alt stream if + 1) no such alt stream in Disk + 2) there is Host file in disk + */ + if (updatePairs[pair.HostIndex].DirIndex >= 0) + continue; + } + } up2.NewData = up2.NewProps = false; + up2.UseArcProps = true; break; case NPairAction::kCompress: @@ -50,9 +59,12 @@ void UpdateProduce( case NPairAction::kCompressAsAnti: up2.IsAnti = true; + up2.UseArcProps = (pair.ArcIndex >= 0); break; } + operationChain.Add(up2); } + operationChain.ReserveDown(); } |