Index: third_party/lzma/v4_65/files/CPP/7zip/UI/Console/List.cpp |
diff --git a/third_party/lzma/v4_65/files/CPP/7zip/UI/Console/List.cpp b/third_party/lzma/v4_65/files/CPP/7zip/UI/Console/List.cpp |
deleted file mode 100644 |
index 82a08f2f046c45b1e10fddfbcfd35b25f83b0bdd..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CPP/7zip/UI/Console/List.cpp |
+++ /dev/null |
@@ -1,596 +0,0 @@ |
-// List.cpp |
- |
-#include "StdAfx.h" |
- |
-#include "List.h" |
-#include "ConsoleClose.h" |
- |
-#include "Common/StringConvert.h" |
-#include "Common/StdOutStream.h" |
-#include "Common/IntToString.h" |
-#include "Common/MyCom.h" |
- |
-#include "Windows/PropVariant.h" |
-#include "Windows/Defs.h" |
-#include "Windows/PropVariantConversions.h" |
-#include "Windows/FileDir.h" |
-#include "Windows/Error.h" |
- |
-#include "../../Archive/IArchive.h" |
- |
-#include "../Common/PropIDUtils.h" |
-#include "../Common/OpenArchive.h" |
- |
-#include "OpenCallbackConsole.h" |
- |
-using namespace NWindows; |
- |
-struct CPropIdToName |
-{ |
- PROPID PropID; |
- const wchar_t *Name; |
-}; |
- |
-static CPropIdToName kPropIdToName[] = |
-{ |
- { kpidPath, L"Path" }, |
- { kpidName, L"Name" }, |
- { kpidIsDir, L"Folder" }, |
- { kpidSize, L"Size" }, |
- { kpidPackSize, L"Packed Size" }, |
- { kpidAttrib, L"Attributes" }, |
- { kpidCTime, L"Created" }, |
- { kpidATime, L"Accessed" }, |
- { kpidMTime, L"Modified" }, |
- { kpidSolid, L"Solid" }, |
- { kpidCommented, L"Commented" }, |
- { kpidEncrypted, L"Encrypted" }, |
- { kpidSplitBefore, L"Split Before" }, |
- { kpidSplitAfter, L"Split After" }, |
- { kpidDictionarySize, L"Dictionary Size" }, |
- { kpidCRC, L"CRC" }, |
- { kpidType, L"Type" }, |
- { kpidIsAnti, L"Anti" }, |
- { kpidMethod, L"Method" }, |
- { kpidHostOS, L"Host OS" }, |
- { kpidFileSystem, L"File System" }, |
- { kpidUser, L"User" }, |
- { kpidGroup, L"Group" }, |
- { kpidBlock, L"Block" }, |
- { kpidComment, L"Comment" }, |
- { kpidPosition, L"Position" }, |
- { kpidPrefix, L"Prefix" }, |
- { kpidNumSubDirs, L"Folders" }, |
- { kpidNumSubFiles, L"Files" }, |
- { kpidUnpackVer, L"Version" }, |
- { kpidVolume, L"Volume" }, |
- { kpidIsVolume, L"Multivolume" }, |
- { kpidOffset, L"Offset" }, |
- { kpidLinks, L"Links" }, |
- { kpidNumBlocks, L"Blocks" }, |
- { kpidNumVolumes, L"Volumes" }, |
- |
- { kpidBit64, L"64-bit" }, |
- { kpidBigEndian, L"Big-endian" }, |
- { kpidCpu, L"CPU" }, |
- { kpidPhySize, L"Physical Size" }, |
- { kpidHeadersSize, L"Headers Size" }, |
- { kpidChecksum, L"Checksum" }, |
- { kpidCharacts, L"Characteristics" }, |
- { kpidVa, L"Virtual Address" }, |
- { kpidFreeSpace, L"Free Space" }, |
- { kpidClusterSize, L"Cluster Size" } |
-}; |
- |
-static const char kEmptyAttribChar = '.'; |
- |
-static const char *kListing = "Listing archive: "; |
-static const wchar_t *kFilesMessage = L"files"; |
-static const wchar_t *kDirsMessage = L"folders"; |
- |
-static void GetAttribString(DWORD wa, bool isDir, char *s) |
-{ |
- s[0] = ((wa & FILE_ATTRIBUTE_DIRECTORY) != 0 || isDir) ? 'D' : kEmptyAttribChar; |
- s[1] = ((wa & FILE_ATTRIBUTE_READONLY) != 0) ? 'R': kEmptyAttribChar; |
- s[2] = ((wa & FILE_ATTRIBUTE_HIDDEN) != 0) ? 'H': kEmptyAttribChar; |
- s[3] = ((wa & FILE_ATTRIBUTE_SYSTEM) != 0) ? 'S': kEmptyAttribChar; |
- s[4] = ((wa & FILE_ATTRIBUTE_ARCHIVE) != 0) ? 'A': kEmptyAttribChar; |
- s[5] = '\0'; |
-} |
- |
-enum EAdjustment |
-{ |
- kLeft, |
- kCenter, |
- kRight |
-}; |
- |
-struct CFieldInfo |
-{ |
- PROPID PropID; |
- UString Name; |
- EAdjustment TitleAdjustment; |
- EAdjustment TextAdjustment; |
- int PrefixSpacesWidth; |
- int Width; |
-}; |
- |
-struct CFieldInfoInit |
-{ |
- PROPID PropID; |
- const wchar_t *Name; |
- EAdjustment TitleAdjustment; |
- EAdjustment TextAdjustment; |
- int PrefixSpacesWidth; |
- int Width; |
-}; |
- |
-CFieldInfoInit kStandardFieldTable[] = |
-{ |
- { kpidMTime, L" Date Time", kLeft, kLeft, 0, 19 }, |
- { kpidAttrib, L"Attr", kRight, kCenter, 1, 5 }, |
- { kpidSize, L"Size", kRight, kRight, 1, 12 }, |
- { kpidPackSize, L"Compressed", kRight, kRight, 1, 12 }, |
- { kpidPath, L"Name", kLeft, kLeft, 2, 24 } |
-}; |
- |
-void PrintSpaces(int numSpaces) |
-{ |
- for (int i = 0; i < numSpaces; i++) |
- g_StdOut << ' '; |
-} |
- |
-void PrintString(EAdjustment adjustment, int width, const UString &textString) |
-{ |
- const int numSpaces = width - textString.Length(); |
- int numLeftSpaces = 0; |
- switch (adjustment) |
- { |
- case kLeft: |
- numLeftSpaces = 0; |
- break; |
- case kCenter: |
- numLeftSpaces = numSpaces / 2; |
- break; |
- case kRight: |
- numLeftSpaces = numSpaces; |
- break; |
- } |
- PrintSpaces(numLeftSpaces); |
- g_StdOut << textString; |
- PrintSpaces(numSpaces - numLeftSpaces); |
-} |
- |
-class CFieldPrinter |
-{ |
- CObjectVector<CFieldInfo> _fields; |
-public: |
- void Clear() { _fields.Clear(); } |
- void Init(const CFieldInfoInit *standardFieldTable, int numItems); |
- HRESULT Init(IInArchive *archive); |
- void PrintTitle(); |
- void PrintTitleLines(); |
- HRESULT PrintItemInfo(IInArchive *archive, |
- const UString &defaultItemName, |
- UInt32 index, |
- bool techMode); |
- HRESULT PrintSummaryInfo(UInt64 numFiles, UInt64 numDirs, |
- const UInt64 *size, const UInt64 *compressedSize); |
-}; |
- |
-void CFieldPrinter::Init(const CFieldInfoInit *standardFieldTable, int numItems) |
-{ |
- Clear(); |
- for (int i = 0; i < numItems; i++) |
- { |
- CFieldInfo fieldInfo; |
- const CFieldInfoInit &fieldInfoInit = standardFieldTable[i]; |
- fieldInfo.PropID = fieldInfoInit.PropID; |
- fieldInfo.Name = fieldInfoInit.Name; |
- fieldInfo.TitleAdjustment = fieldInfoInit.TitleAdjustment; |
- fieldInfo.TextAdjustment = fieldInfoInit.TextAdjustment; |
- fieldInfo.PrefixSpacesWidth = fieldInfoInit.PrefixSpacesWidth; |
- fieldInfo.Width = fieldInfoInit.Width; |
- _fields.Add(fieldInfo); |
- } |
-} |
- |
-static UString GetPropName(PROPID propID, BSTR name) |
-{ |
- for (int i = 0; i < sizeof(kPropIdToName) / sizeof(kPropIdToName[0]); i++) |
- { |
- const CPropIdToName &propIdToName = kPropIdToName[i]; |
- if (propIdToName.PropID == propID) |
- return propIdToName.Name; |
- } |
- if (name) |
- return name; |
- wchar_t s[32]; |
- ConvertUInt64ToString(propID, s); |
- return s; |
-} |
- |
-HRESULT CFieldPrinter::Init(IInArchive *archive) |
-{ |
- Clear(); |
- UInt32 numProps; |
- RINOK(archive->GetNumberOfProperties(&numProps)); |
- for (UInt32 i = 0; i < numProps; i++) |
- { |
- CMyComBSTR name; |
- PROPID propID; |
- VARTYPE vt; |
- RINOK(archive->GetPropertyInfo(i, &name, &propID, &vt)); |
- CFieldInfo fieldInfo; |
- fieldInfo.PropID = propID; |
- fieldInfo.Name = GetPropName(propID, name); |
- _fields.Add(fieldInfo); |
- } |
- return S_OK; |
-} |
- |
-void CFieldPrinter::PrintTitle() |
-{ |
- for (int i = 0; i < _fields.Size(); i++) |
- { |
- const CFieldInfo &fieldInfo = _fields[i]; |
- PrintSpaces(fieldInfo.PrefixSpacesWidth); |
- PrintString(fieldInfo.TitleAdjustment, |
- ((fieldInfo.PropID == kpidPath) ? 0: fieldInfo.Width), fieldInfo.Name); |
- } |
-} |
- |
-void CFieldPrinter::PrintTitleLines() |
-{ |
- for (int i = 0; i < _fields.Size(); i++) |
- { |
- const CFieldInfo &fieldInfo = _fields[i]; |
- PrintSpaces(fieldInfo.PrefixSpacesWidth); |
- for (int i = 0; i < fieldInfo.Width; i++) |
- g_StdOut << '-'; |
- } |
-} |
- |
- |
-BOOL IsFileTimeZero(CONST FILETIME *lpFileTime) |
-{ |
- return (lpFileTime->dwLowDateTime == 0) && (lpFileTime->dwHighDateTime == 0); |
-} |
- |
-static const char *kEmptyTimeString = " "; |
-void PrintTime(const NCOM::CPropVariant &prop) |
-{ |
- if (prop.vt != VT_FILETIME) |
- throw "incorrect item"; |
- if (IsFileTimeZero(&prop.filetime)) |
- g_StdOut << kEmptyTimeString; |
- else |
- { |
- FILETIME localFileTime; |
- if (!FileTimeToLocalFileTime(&prop.filetime, &localFileTime)) |
- throw "FileTimeToLocalFileTime error"; |
- char s[32]; |
- if (ConvertFileTimeToString(localFileTime, s, true, true)) |
- g_StdOut << s; |
- else |
- g_StdOut << kEmptyTimeString; |
- } |
-} |
- |
-HRESULT CFieldPrinter::PrintItemInfo(IInArchive *archive, |
- const UString &defaultItemName, |
- UInt32 index, |
- bool techMode) |
-{ |
- /* |
- if (techMode) |
- { |
- g_StdOut << "Index = "; |
- g_StdOut << (UInt64)index; |
- g_StdOut << endl; |
- } |
- */ |
- for (int i = 0; i < _fields.Size(); i++) |
- { |
- const CFieldInfo &fieldInfo = _fields[i]; |
- if (!techMode) |
- PrintSpaces(fieldInfo.PrefixSpacesWidth); |
- |
- NCOM::CPropVariant prop; |
- if (fieldInfo.PropID == kpidPath) |
- { |
- UString s; |
- RINOK(GetArchiveItemPath(archive, index, defaultItemName, s)); |
- prop = s; |
- } |
- else |
- { |
- RINOK(archive->GetProperty(index, fieldInfo.PropID, &prop)); |
- } |
- if (techMode) |
- { |
- g_StdOut << fieldInfo.Name << " = "; |
- } |
- int width = (fieldInfo.PropID == kpidPath) ? 0: fieldInfo.Width; |
- if (prop.vt == VT_EMPTY) |
- { |
- switch(fieldInfo.PropID) |
- { |
- case kpidPath: prop = defaultItemName; break; |
- default: |
- if (techMode) |
- g_StdOut << endl; |
- else |
- PrintSpaces(width); |
- continue; |
- } |
- } |
- if (fieldInfo.PropID == kpidMTime) |
- { |
- PrintTime(prop); |
- } |
- else if (fieldInfo.PropID == kpidAttrib) |
- { |
- if (prop.vt != VT_UI4) |
- throw "incorrect item"; |
- UInt32 attributes = prop.ulVal; |
- bool isFolder; |
- RINOK(IsArchiveItemFolder(archive, index, isFolder)); |
- char s[8]; |
- GetAttribString(attributes, isFolder, s); |
- g_StdOut << s; |
- } |
- else if (prop.vt == VT_BSTR) |
- { |
- if (techMode) |
- g_StdOut << prop.bstrVal; |
- else |
- PrintString(fieldInfo.TextAdjustment, width, prop.bstrVal); |
- } |
- else |
- { |
- UString s = ConvertPropertyToString(prop, fieldInfo.PropID); |
- s.Replace(wchar_t(0xA), L' '); |
- s.Replace(wchar_t(0xD), L' '); |
- |
- if (techMode) |
- g_StdOut << s; |
- else |
- PrintString(fieldInfo.TextAdjustment, width, s); |
- } |
- if (techMode) |
- g_StdOut << endl; |
- } |
- return S_OK; |
-} |
- |
-void PrintNumberString(EAdjustment adjustment, int width, const UInt64 *value) |
-{ |
- wchar_t textString[32] = { 0 }; |
- if (value != NULL) |
- ConvertUInt64ToString(*value, textString); |
- PrintString(adjustment, width, textString); |
-} |
- |
- |
-HRESULT CFieldPrinter::PrintSummaryInfo(UInt64 numFiles, UInt64 numDirs, |
- const UInt64 *size, const UInt64 *compressedSize) |
-{ |
- for (int i = 0; i < _fields.Size(); i++) |
- { |
- const CFieldInfo &fieldInfo = _fields[i]; |
- PrintSpaces(fieldInfo.PrefixSpacesWidth); |
- NCOM::CPropVariant prop; |
- if (fieldInfo.PropID == kpidSize) |
- PrintNumberString(fieldInfo.TextAdjustment, fieldInfo.Width, size); |
- else if (fieldInfo.PropID == kpidPackSize) |
- PrintNumberString(fieldInfo.TextAdjustment, fieldInfo.Width, compressedSize); |
- else if (fieldInfo.PropID == kpidPath) |
- { |
- wchar_t textString[32]; |
- ConvertUInt64ToString(numFiles, textString); |
- UString temp = textString; |
- temp += L" "; |
- temp += kFilesMessage; |
- temp += L", "; |
- ConvertUInt64ToString(numDirs, textString); |
- temp += textString; |
- temp += L" "; |
- temp += kDirsMessage; |
- PrintString(fieldInfo.TextAdjustment, 0, temp); |
- } |
- else |
- PrintString(fieldInfo.TextAdjustment, fieldInfo.Width, L""); |
- } |
- return S_OK; |
-} |
- |
-bool GetUInt64Value(IInArchive *archive, UInt32 index, PROPID propID, UInt64 &value) |
-{ |
- NCOM::CPropVariant prop; |
- if (archive->GetProperty(index, propID, &prop) != S_OK) |
- throw "GetPropertyValue error"; |
- if (prop.vt == VT_EMPTY) |
- return false; |
- value = ConvertPropVariantToUInt64(prop); |
- return true; |
-} |
- |
-HRESULT ListArchives(CCodecs *codecs, const CIntVector &formatIndices, |
- UStringVector &archivePaths, UStringVector &archivePathsFull, |
- const NWildcard::CCensorNode &wildcardCensor, |
- bool enableHeaders, bool techMode, |
- #ifndef _NO_CRYPTO |
- bool &passwordEnabled, UString &password, |
- #endif |
- UInt64 &numErrors) |
-{ |
- numErrors = 0; |
- CFieldPrinter fieldPrinter; |
- if (!techMode) |
- fieldPrinter.Init(kStandardFieldTable, sizeof(kStandardFieldTable) / sizeof(kStandardFieldTable[0])); |
- |
- UInt64 numFiles2 = 0, numDirs2 = 0, totalPackSize2 = 0, totalUnPackSize2 = 0; |
- UInt64 *totalPackSizePointer2 = 0, *totalUnPackSizePointer2 = 0; |
- for (int i = 0; i < archivePaths.Size(); i++) |
- { |
- const UString &archiveName = archivePaths[i]; |
- NFile::NFind::CFileInfoW fi; |
- if (!NFile::NFind::FindFile(archiveName, fi) || fi.IsDir()) |
- { |
- g_StdOut << endl << "Error: " << archiveName << " is not file" << endl; |
- numErrors++; |
- continue; |
- } |
- |
- CArchiveLink archiveLink; |
- |
- COpenCallbackConsole openCallback; |
- openCallback.OutStream = &g_StdOut; |
- |
- #ifndef _NO_CRYPTO |
- |
- openCallback.PasswordIsDefined = passwordEnabled; |
- openCallback.Password = password; |
- |
- #endif |
- |
- HRESULT result = MyOpenArchive(codecs, formatIndices, archiveName, archiveLink, &openCallback); |
- if (result != S_OK) |
- { |
- if (result == E_ABORT) |
- return result; |
- g_StdOut << endl << "Error: " << archiveName << ": "; |
- if (result == S_FALSE) |
- g_StdOut << "is not supported archive"; |
- else if (result == E_OUTOFMEMORY) |
- g_StdOut << "Can't allocate required memory"; |
- else |
- g_StdOut << NError::MyFormatMessage(result); |
- g_StdOut << endl; |
- numErrors++; |
- 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); |
- } |
- } |
- |
- IInArchive *archive = archiveLink.GetArchive(); |
- const UString defaultItemName = archiveLink.GetDefaultItemName(); |
- |
- if (enableHeaders) |
- { |
- g_StdOut << endl << kListing << archiveName << endl << endl; |
- |
- UInt32 numProps; |
- if (archive->GetNumberOfArchiveProperties(&numProps) == S_OK) |
- { |
- for (UInt32 i = 0; i < numProps; i++) |
- { |
- CMyComBSTR name; |
- PROPID propID; |
- VARTYPE vt; |
- if (archive->GetArchivePropertyInfo(i, &name, &propID, &vt) != S_OK) |
- continue; |
- NCOM::CPropVariant prop; |
- if (archive->GetArchiveProperty(propID, &prop) != S_OK) |
- continue; |
- UString s = ConvertPropertyToString(prop, propID); |
- if (!s.IsEmpty()) |
- g_StdOut << GetPropName(propID, name) << " = " << s << endl; |
- } |
- } |
- if (techMode) |
- g_StdOut << "----------\n"; |
- if (numProps > 0) |
- g_StdOut << endl; |
- } |
- |
- if (enableHeaders && !techMode) |
- { |
- fieldPrinter.PrintTitle(); |
- g_StdOut << endl; |
- fieldPrinter.PrintTitleLines(); |
- g_StdOut << endl; |
- } |
- |
- if (techMode) |
- { |
- RINOK(fieldPrinter.Init(archive)); |
- } |
- UInt64 numFiles = 0, numDirs = 0, totalPackSize = 0, totalUnPackSize = 0; |
- UInt64 *totalPackSizePointer = 0, *totalUnPackSizePointer = 0; |
- UInt32 numItems; |
- RINOK(archive->GetNumberOfItems(&numItems)); |
- for(UInt32 i = 0; i < numItems; i++) |
- { |
- if (NConsoleClose::TestBreakSignal()) |
- return E_ABORT; |
- |
- UString filePath; |
- RINOK(GetArchiveItemPath(archive, i, defaultItemName, filePath)); |
- |
- bool isFolder; |
- RINOK(IsArchiveItemFolder(archive, i, isFolder)); |
- if (!wildcardCensor.CheckPath(filePath, !isFolder)) |
- continue; |
- |
- fieldPrinter.PrintItemInfo(archive, defaultItemName, i, techMode); |
- |
- UInt64 packSize, unpackSize; |
- if (!GetUInt64Value(archive, i, kpidSize, unpackSize)) |
- unpackSize = 0; |
- else |
- totalUnPackSizePointer = &totalUnPackSize; |
- if (!GetUInt64Value(archive, i, kpidPackSize, packSize)) |
- packSize = 0; |
- else |
- totalPackSizePointer = &totalPackSize; |
- |
- g_StdOut << endl; |
- |
- if (isFolder) |
- numDirs++; |
- else |
- numFiles++; |
- totalPackSize += packSize; |
- totalUnPackSize += unpackSize; |
- } |
- if (enableHeaders && !techMode) |
- { |
- fieldPrinter.PrintTitleLines(); |
- g_StdOut << endl; |
- fieldPrinter.PrintSummaryInfo(numFiles, numDirs, totalUnPackSizePointer, totalPackSizePointer); |
- g_StdOut << endl; |
- } |
- if (totalPackSizePointer != 0) |
- { |
- totalPackSizePointer2 = &totalPackSize2; |
- totalPackSize2 += totalPackSize; |
- } |
- if (totalUnPackSizePointer != 0) |
- { |
- totalUnPackSizePointer2 = &totalUnPackSize2; |
- totalUnPackSize2 += totalUnPackSize; |
- } |
- numFiles2 += numFiles; |
- numDirs2 += numDirs; |
- } |
- if (enableHeaders && !techMode && archivePaths.Size() > 1) |
- { |
- g_StdOut << endl; |
- fieldPrinter.PrintTitleLines(); |
- g_StdOut << endl; |
- fieldPrinter.PrintSummaryInfo(numFiles2, numDirs2, totalUnPackSizePointer2, totalPackSizePointer2); |
- g_StdOut << endl; |
- g_StdOut << "Archives: " << archivePaths.Size() << endl; |
- } |
- return S_OK; |
-} |