Index: third_party/lzma/v4_65/files/CPP/7zip/UI/Common/Extract.cpp |
diff --git a/third_party/lzma/v4_65/files/CPP/7zip/UI/Common/Extract.cpp b/third_party/lzma/v4_65/files/CPP/7zip/UI/Common/Extract.cpp |
deleted file mode 100644 |
index 3ac497f428a1f292abc899946fd11d0d76ce2b20..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CPP/7zip/UI/Common/Extract.cpp |
+++ /dev/null |
@@ -1,218 +0,0 @@ |
-// Extract.cpp |
- |
-#include "StdAfx.h" |
- |
-#include "Extract.h" |
- |
-#include "Windows/Defs.h" |
-#include "Windows/FileDir.h" |
- |
-#include "OpenArchive.h" |
-#include "SetProperties.h" |
- |
-using namespace NWindows; |
- |
-static HRESULT DecompressArchive( |
- IInArchive *archive, |
- UInt64 packSize, |
- const NWildcard::CCensorNode &wildcardCensor, |
- const CExtractOptions &options, |
- IExtractCallbackUI *callback, |
- CArchiveExtractCallback *extractCallbackSpec, |
- UString &errorMessage) |
-{ |
- CRecordVector<UInt32> realIndices; |
- UInt32 numItems; |
- RINOK(archive->GetNumberOfItems(&numItems)); |
- |
- for(UInt32 i = 0; i < numItems; i++) |
- { |
- UString filePath; |
- RINOK(GetArchiveItemPath(archive, i, options.DefaultItemName, filePath)); |
- bool isFolder; |
- RINOK(IsArchiveItemFolder(archive, i, isFolder)); |
- if (!wildcardCensor.CheckPath(filePath, !isFolder)) |
- continue; |
- realIndices.Add(i); |
- } |
- if (realIndices.Size() == 0) |
- { |
- callback->ThereAreNoFiles(); |
- return S_OK; |
- } |
- |
- UStringVector removePathParts; |
- |
- UString outDir = options.OutputDir; |
- outDir.Replace(L"*", options.DefaultItemName); |
- #ifdef _WIN32 |
- outDir.TrimRight(); |
- #endif |
- |
- if(!outDir.IsEmpty()) |
- if(!NFile::NDirectory::CreateComplexDirectory(outDir)) |
- { |
- HRESULT res = ::GetLastError(); |
- if (res == S_OK) |
- res = E_FAIL; |
- errorMessage = ((UString)L"Can not create output directory ") + outDir; |
- return res; |
- } |
- |
- extractCallbackSpec->Init( |
- archive, |
- callback, |
- options.StdOutMode, |
- outDir, |
- removePathParts, |
- options.DefaultItemName, |
- options.ArchiveFileInfo.MTime, |
- options.ArchiveFileInfo.Attrib, |
- packSize); |
- |
- #ifdef COMPRESS_MT |
- RINOK(SetProperties(archive, options.Properties)); |
- #endif |
- |
- HRESULT result = archive->Extract(&realIndices.Front(), |
- realIndices.Size(), options.TestMode? 1: 0, extractCallbackSpec); |
- |
- return callback->ExtractResult(result); |
-} |
- |
-HRESULT DecompressArchives( |
- CCodecs *codecs, const CIntVector &formatIndices, |
- UStringVector &archivePaths, UStringVector &archivePathsFull, |
- const NWildcard::CCensorNode &wildcardCensor, |
- const CExtractOptions &optionsSpec, |
- IOpenCallbackUI *openCallback, |
- IExtractCallbackUI *extractCallback, |
- UString &errorMessage, |
- CDecompressStat &stat) |
-{ |
- stat.Clear(); |
- CExtractOptions options = optionsSpec; |
- int i; |
- UInt64 totalPackSize = 0; |
- CRecordVector<UInt64> archiveSizes; |
- for (i = 0; i < archivePaths.Size(); i++) |
- { |
- const UString &archivePath = archivePaths[i]; |
- NFile::NFind::CFileInfoW fi; |
- if (!NFile::NFind::FindFile(archivePath, fi)) |
- throw "there is no such archive"; |
- if (fi.IsDir()) |
- throw "can't decompress folder"; |
- archiveSizes.Add(fi.Size); |
- totalPackSize += fi.Size; |
- } |
- CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback; |
- CMyComPtr<IArchiveExtractCallback> ec(extractCallbackSpec); |
- bool multi = (archivePaths.Size() > 1); |
- extractCallbackSpec->InitForMulti(multi, options.PathMode, options.OverwriteMode); |
- if (multi) |
- { |
- RINOK(extractCallback->SetTotal(totalPackSize)); |
- } |
- for (i = 0; i < archivePaths.Size(); i++) |
- { |
- const UString &archivePath = archivePaths[i]; |
- NFile::NFind::CFileInfoW fi; |
- if (!NFile::NFind::FindFile(archivePath, fi)) |
- throw "there is no such archive"; |
- |
- if (fi.IsDir()) |
- throw "there is no such archive"; |
- |
- options.ArchiveFileInfo = fi; |
- |
- #ifndef _NO_CRYPTO |
- openCallback->Open_ClearPasswordWasAskedFlag(); |
- #endif |
- |
- RINOK(extractCallback->BeforeOpen(archivePath)); |
- CArchiveLink archiveLink; |
- |
- CIntVector formatIndices2 = formatIndices; |
- #ifndef _SFX |
- if (formatIndices.IsEmpty()) |
- { |
- int pos = archivePath.ReverseFind(L'.'); |
- if (pos >= 0) |
- { |
- UString s = archivePath.Mid(pos + 1); |
- int index = codecs->FindFormatForExtension(s); |
- if (index >= 0 && s == L"001") |
- { |
- s = archivePath.Left(pos); |
- pos = s.ReverseFind(L'.'); |
- if (pos >= 0) |
- { |
- int index2 = codecs->FindFormatForExtension(s.Mid(pos + 1)); |
- if (index2 >= 0 && s.CompareNoCase(L"rar") != 0) |
- { |
- formatIndices2.Add(index2); |
- formatIndices2.Add(index); |
- } |
- } |
- } |
- } |
- } |
- #endif |
- HRESULT result = MyOpenArchive(codecs, formatIndices2, archivePath, archiveLink, openCallback); |
- if (result == E_ABORT) |
- return result; |
- |
- bool crypted = false; |
- #ifndef _NO_CRYPTO |
- crypted = openCallback->Open_WasPasswordAsked(); |
- #endif |
- |
- RINOK(extractCallback->OpenResult(archivePath, result, crypted)); |
- if (result != S_OK) |
- continue; |
- |
- for (int v = 0; v < archiveLink.VolumePaths.Size(); v++) |
- { |
- int index = archivePathsFull.FindInSorted(archiveLink.VolumePaths[v]); |
- if (index >= 0 && index > i) |
- { |
- archivePaths.Delete(index); |
- archivePathsFull.Delete(index); |
- totalPackSize -= archiveSizes[index]; |
- archiveSizes.Delete(index); |
- } |
- } |
- if (archiveLink.VolumePaths.Size() != 0) |
- { |
- totalPackSize += archiveLink.VolumesSize; |
- RINOK(extractCallback->SetTotal(totalPackSize)); |
- } |
- |
- #ifndef _NO_CRYPTO |
- UString password; |
- RINOK(openCallback->Open_GetPasswordIfAny(password)); |
- if (!password.IsEmpty()) |
- { |
- RINOK(extractCallback->SetPassword(password)); |
- } |
- #endif |
- |
- options.DefaultItemName = archiveLink.GetDefaultItemName(); |
- RINOK(DecompressArchive( |
- archiveLink.GetArchive(), |
- fi.Size + archiveLink.VolumesSize, |
- wildcardCensor, options, extractCallback, extractCallbackSpec, errorMessage)); |
- extractCallbackSpec->LocalProgressSpec->InSize += fi.Size + |
- archiveLink.VolumesSize; |
- extractCallbackSpec->LocalProgressSpec->OutSize = extractCallbackSpec->UnpackSize; |
- if (!errorMessage.IsEmpty()) |
- return E_FAIL; |
- } |
- stat.NumFolders = extractCallbackSpec->NumFolders; |
- stat.NumFiles = extractCallbackSpec->NumFiles; |
- stat.UnpackSize = extractCallbackSpec->UnpackSize; |
- stat.NumArchives = archivePaths.Size(); |
- stat.PackSize = extractCallbackSpec->LocalProgressSpec->InSize; |
- return S_OK; |
-} |