Index: third_party/lzma/v4_65/files/CPP/7zip/UI/Console/Main.cpp |
diff --git a/third_party/lzma/v4_65/files/CPP/7zip/UI/Console/Main.cpp b/third_party/lzma/v4_65/files/CPP/7zip/UI/Console/Main.cpp |
deleted file mode 100644 |
index 87d48e95ca94307fea3632c3a462071887c67e70..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CPP/7zip/UI/Console/Main.cpp |
+++ /dev/null |
@@ -1,596 +0,0 @@ |
-// Main.cpp |
- |
-#include "StdAfx.h" |
- |
-#include "Common/MyInitGuid.h" |
- |
-#include "Common/CommandLineParser.h" |
-#include "Common/MyException.h" |
-#include "Common/IntToString.h" |
-#include "Common/StdOutStream.h" |
-#include "Common/StringConvert.h" |
-#include "Common/StringToInt.h" |
- |
-#include "Windows/FileDir.h" |
-#include "Windows/FileName.h" |
-#include "Windows/Defs.h" |
-#include "Windows/Error.h" |
-#ifdef _WIN32 |
-#include "Windows/MemoryLock.h" |
-#endif |
- |
-#include "../../IPassword.h" |
-#include "../../ICoder.h" |
-#include "../Common/UpdateAction.h" |
-#include "../Common/Update.h" |
-#include "../Common/Extract.h" |
-#include "../Common/ArchiveCommandLine.h" |
-#include "../Common/ExitCode.h" |
-#ifdef EXTERNAL_CODECS |
-#include "../Common/LoadCodecs.h" |
-#endif |
- |
-#include "../../Compress/LZMA_Alone/LzmaBenchCon.h" |
- |
-#include "List.h" |
-#include "OpenCallbackConsole.h" |
-#include "ExtractCallbackConsole.h" |
-#include "UpdateCallbackConsole.h" |
- |
-#include "../../MyVersion.h" |
- |
-#if defined( _WIN32) && defined( _7ZIP_LARGE_PAGES) |
-extern "C" |
-{ |
-#include "../../../../C/Alloc.h" |
-} |
-#endif |
- |
-using namespace NWindows; |
-using namespace NFile; |
-using namespace NCommandLineParser; |
- |
-HINSTANCE g_hInstance = 0; |
-extern CStdOutStream *g_StdStream; |
- |
-static const char *kCopyrightString = "\n7-Zip" |
-#ifndef EXTERNAL_CODECS |
-" (A)" |
-#endif |
- |
-#ifdef _WIN64 |
-" [64]" |
-#endif |
- |
-" " MY_VERSION_COPYRIGHT_DATE "\n"; |
- |
-static const char *kHelpString = |
- "\nUsage: 7z" |
-#ifdef _NO_CRYPTO |
- "r" |
-#else |
-#ifndef EXTERNAL_CODECS |
- "a" |
-#endif |
-#endif |
- " <command> [<switches>...] <archive_name> [<file_names>...]\n" |
- " [<@listfiles...>]\n" |
- "\n" |
- "<Commands>\n" |
- " a: Add files to archive\n" |
- " b: Benchmark\n" |
- " d: Delete files from archive\n" |
- " e: Extract files from archive (without using directory names)\n" |
- " l: List contents of archive\n" |
-// " l[a|t][f]: List contents of archive\n" |
-// " a - with Additional fields\n" |
-// " t - with all fields\n" |
-// " f - with Full pathnames\n" |
- " t: Test integrity of archive\n" |
- " u: Update files to archive\n" |
- " x: eXtract files with full paths\n" |
- "<Switches>\n" |
- " -ai[r[-|0]]{@listfile|!wildcard}: Include archives\n" |
- " -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives\n" |
- " -bd: Disable percentage indicator\n" |
- " -i[r[-|0]]{@listfile|!wildcard}: Include filenames\n" |
- " -m{Parameters}: set compression Method\n" |
- " -o{Directory}: set Output directory\n" |
- #ifndef _NO_CRYPTO |
- " -p{Password}: set Password\n" |
- #endif |
- " -r[-|0]: Recurse subdirectories\n" |
- " -scs{UTF-8 | WIN | DOS}: set charset for list files\n" |
- " -sfx[{name}]: Create SFX archive\n" |
- " -si[{name}]: read data from stdin\n" |
- " -slt: show technical information for l (List) command\n" |
- " -so: write data to stdout\n" |
- " -ssc[-]: set sensitive case mode\n" |
- " -ssw: compress shared files\n" |
- " -t{Type}: Set type of archive\n" |
- " -v{Size}[b|k|m|g]: Create volumes\n" |
- " -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options\n" |
- " -w[{path}]: assign Work directory. Empty path means a temporary directory\n" |
- " -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames\n" |
- " -y: assume Yes on all queries\n"; |
- |
-// --------------------------- |
-// exception messages |
- |
-static const char *kEverythingIsOk = "Everything is Ok"; |
-static const char *kUserErrorMessage = "Incorrect command line"; // NExitCode::kUserError |
-static const char *kNoFormats = "7-Zip cannot find the code that works with archives."; |
- |
-static const wchar_t *kDefaultSfxModule = L"7zCon.sfx"; |
- |
-static void ShowMessageAndThrowException(CStdOutStream &s, LPCSTR message, NExitCode::EEnum code) |
-{ |
- s << message << endl; |
- throw code; |
-} |
- |
-static void PrintHelpAndExit(CStdOutStream &s) // yyy |
-{ |
- s << kHelpString; |
- ShowMessageAndThrowException(s, kUserErrorMessage, NExitCode::kUserError); |
-} |
- |
-#ifndef _WIN32 |
-static void GetArguments(int numArguments, const char *arguments[], UStringVector &parts) |
-{ |
- parts.Clear(); |
- for(int i = 0; i < numArguments; i++) |
- { |
- UString s = MultiByteToUnicodeString(arguments[i]); |
- parts.Add(s); |
- } |
-} |
-#endif |
- |
-static void ShowCopyrightAndHelp(CStdOutStream &s, bool needHelp) |
-{ |
- s << kCopyrightString; |
- // s << "# CPUs: " << (UInt64)NWindows::NSystem::GetNumberOfProcessors() << "\n"; |
- if (needHelp) |
- s << kHelpString; |
-} |
- |
-#ifdef EXTERNAL_CODECS |
-static void PrintString(CStdOutStream &stdStream, const AString &s, int size) |
-{ |
- int len = s.Length(); |
- stdStream << s; |
- for (int i = len; i < size; i++) |
- stdStream << ' '; |
-} |
-#endif |
- |
-static void PrintString(CStdOutStream &stdStream, const UString &s, int size) |
-{ |
- int len = s.Length(); |
- stdStream << s; |
- for (int i = len; i < size; i++) |
- stdStream << ' '; |
-} |
- |
-static inline char GetHex(Byte value) |
-{ |
- return (char)((value < 10) ? ('0' + value) : ('A' + (value - 10))); |
-} |
- |
-const char *kUnsupportedArcTypeMessage = "Unsupported archive type"; |
- |
-int Main2( |
- #ifndef _WIN32 |
- int numArguments, const char *arguments[] |
- #endif |
-) |
-{ |
- #ifdef _WIN32 |
- SetFileApisToOEM(); |
- #endif |
- |
- UStringVector commandStrings; |
- #ifdef _WIN32 |
- NCommandLineParser::SplitCommandLine(GetCommandLineW(), commandStrings); |
- #else |
- GetArguments(numArguments, arguments, commandStrings); |
- #endif |
- |
- if(commandStrings.Size() == 1) |
- { |
- ShowCopyrightAndHelp(g_StdOut, true); |
- return 0; |
- } |
- commandStrings.Delete(0); |
- |
- CArchiveCommandLineOptions options; |
- |
- CArchiveCommandLineParser parser; |
- |
- parser.Parse1(commandStrings, options); |
- |
- if(options.HelpMode) |
- { |
- ShowCopyrightAndHelp(g_StdOut, true); |
- return 0; |
- } |
- |
- #if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) |
- if (options.LargePages) |
- { |
- SetLargePageSize(); |
- NSecurity::EnableLockMemoryPrivilege(); |
- } |
- #endif |
- |
- CStdOutStream &stdStream = options.StdOutMode ? g_StdErr : g_StdOut; |
- g_StdStream = &stdStream; |
- |
- if (options.EnableHeaders) |
- ShowCopyrightAndHelp(stdStream, false); |
- |
- parser.Parse2(options); |
- |
- CCodecs *codecs = new CCodecs; |
- CMyComPtr< |
- #ifdef EXTERNAL_CODECS |
- ICompressCodecsInfo |
- #else |
- IUnknown |
- #endif |
- > compressCodecsInfo = codecs; |
- HRESULT result = codecs->Load(); |
- if (result != S_OK) |
- throw CSystemException(result); |
- |
- bool isExtractGroupCommand = options.Command.IsFromExtractGroup(); |
- |
- if (codecs->Formats.Size() == 0 && |
- (isExtractGroupCommand || |
- options.Command.CommandType == NCommandType::kList || |
- options.Command.IsFromUpdateGroup())) |
- throw kNoFormats; |
- |
- CIntVector formatIndices; |
- if (!codecs->FindFormatForArchiveType(options.ArcType, formatIndices)) |
- throw kUnsupportedArcTypeMessage; |
- |
- if (options.Command.CommandType == NCommandType::kInfo) |
- { |
- stdStream << endl << "Formats:" << endl; |
- int i; |
- for (i = 0; i < codecs->Formats.Size(); i++) |
- { |
- const CArcInfoEx &arc = codecs->Formats[i]; |
- #ifdef EXTERNAL_CODECS |
- if (arc.LibIndex >= 0) |
- { |
- char s[32]; |
- ConvertUInt64ToString(arc.LibIndex, s); |
- PrintString(stdStream, s, 2); |
- } |
- else |
- #endif |
- stdStream << " "; |
- stdStream << ' '; |
- stdStream << (char)(arc.UpdateEnabled ? 'C' : ' '); |
- stdStream << (char)(arc.KeepName ? 'K' : ' '); |
- stdStream << " "; |
- PrintString(stdStream, arc.Name, 6); |
- stdStream << " "; |
- UString s; |
- for (int t = 0; t < arc.Exts.Size(); t++) |
- { |
- const CArcExtInfo &ext = arc.Exts[t]; |
- s += ext.Ext; |
- if (!ext.AddExt.IsEmpty()) |
- { |
- s += L" ("; |
- s += ext.AddExt; |
- s += L')'; |
- } |
- s += L' '; |
- } |
- PrintString(stdStream, s, 14); |
- stdStream << " "; |
- const CByteBuffer &sig = arc.StartSignature; |
- for (size_t j = 0; j < sig.GetCapacity(); j++) |
- { |
- Byte b = sig[j]; |
- if (b > 0x20 && b < 0x80) |
- { |
- stdStream << (char)b; |
- } |
- else |
- { |
- stdStream << GetHex((Byte)((b >> 4) & 0xF)); |
- stdStream << GetHex((Byte)(b & 0xF)); |
- } |
- stdStream << ' '; |
- } |
- stdStream << endl; |
- } |
- stdStream << endl << "Codecs:" << endl; |
- |
- #ifdef EXTERNAL_CODECS |
- UInt32 numMethods; |
- if (codecs->GetNumberOfMethods(&numMethods) == S_OK) |
- for (UInt32 j = 0; j < numMethods; j++) |
- { |
- int libIndex = codecs->GetCodecLibIndex(j); |
- if (libIndex >= 0) |
- { |
- char s[32]; |
- ConvertUInt64ToString(libIndex, s); |
- PrintString(stdStream, s, 2); |
- } |
- else |
- stdStream << " "; |
- stdStream << ' '; |
- stdStream << (char)(codecs->GetCodecEncoderIsAssigned(j) ? 'C' : ' '); |
- UInt64 id; |
- stdStream << " "; |
- HRESULT res = codecs->GetCodecId(j, id); |
- if (res != S_OK) |
- id = (UInt64)(Int64)-1; |
- char s[32]; |
- ConvertUInt64ToString(id, s, 16); |
- PrintString(stdStream, s, 8); |
- stdStream << " "; |
- PrintString(stdStream, codecs->GetCodecName(j), 11); |
- stdStream << endl; |
- /* |
- if (res != S_OK) |
- throw "incorrect Codec ID"; |
- */ |
- } |
- #endif |
- return S_OK; |
- } |
- else if (options.Command.CommandType == NCommandType::kBenchmark) |
- { |
- if (options.Method.CompareNoCase(L"CRC") == 0) |
- { |
- HRESULT res = CrcBenchCon((FILE *)stdStream, options.NumIterations, options.NumThreads, options.DictionarySize); |
- if (res != S_OK) |
- { |
- if (res == S_FALSE) |
- { |
- stdStream << "\nCRC Error\n"; |
- return NExitCode::kFatalError; |
- } |
- throw CSystemException(res); |
- } |
- } |
- else |
- { |
- HRESULT res = LzmaBenchCon( |
- #ifdef EXTERNAL_LZMA |
- codecs, |
- #endif |
- (FILE *)stdStream, options.NumIterations, options.NumThreads, options.DictionarySize); |
- if (res != S_OK) |
- { |
- if (res == S_FALSE) |
- { |
- stdStream << "\nDecoding Error\n"; |
- return NExitCode::kFatalError; |
- } |
- throw CSystemException(res); |
- } |
- } |
- } |
- else if (isExtractGroupCommand || options.Command.CommandType == NCommandType::kList) |
- { |
- if(isExtractGroupCommand) |
- { |
- CExtractCallbackConsole *ecs = new CExtractCallbackConsole; |
- CMyComPtr<IFolderArchiveExtractCallback> extractCallback = ecs; |
- |
- ecs->OutStream = &stdStream; |
- |
- #ifndef _NO_CRYPTO |
- ecs->PasswordIsDefined = options.PasswordEnabled; |
- ecs->Password = options.Password; |
- #endif |
- |
- ecs->Init(); |
- |
- COpenCallbackConsole openCallback; |
- openCallback.OutStream = &stdStream; |
- |
- #ifndef _NO_CRYPTO |
- openCallback.PasswordIsDefined = options.PasswordEnabled; |
- openCallback.Password = options.Password; |
- #endif |
- |
- CExtractOptions eo; |
- eo.StdOutMode = options.StdOutMode; |
- eo.PathMode = options.Command.GetPathMode(); |
- eo.TestMode = options.Command.IsTestMode(); |
- eo.OverwriteMode = options.OverwriteMode; |
- eo.OutputDir = options.OutputDir; |
- eo.YesToAll = options.YesToAll; |
- #ifdef COMPRESS_MT |
- eo.Properties = options.ExtractProperties; |
- #endif |
- UString errorMessage; |
- CDecompressStat stat; |
- HRESULT result = DecompressArchives( |
- codecs, |
- formatIndices, |
- options.ArchivePathsSorted, |
- options.ArchivePathsFullSorted, |
- options.WildcardCensor.Pairs.Front().Head, |
- eo, &openCallback, ecs, errorMessage, stat); |
- if (!errorMessage.IsEmpty()) |
- { |
- stdStream << endl << "Error: " << errorMessage; |
- if (result == S_OK) |
- result = E_FAIL; |
- } |
- |
- stdStream << endl; |
- if (ecs->NumArchives > 1) |
- stdStream << "Archives: " << ecs->NumArchives << endl; |
- if (ecs->NumArchiveErrors != 0 || ecs->NumFileErrors != 0) |
- { |
- if (ecs->NumArchives > 1) |
- { |
- stdStream << endl; |
- if (ecs->NumArchiveErrors != 0) |
- stdStream << "Archive Errors: " << ecs->NumArchiveErrors << endl; |
- if (ecs->NumFileErrors != 0) |
- stdStream << "Sub items Errors: " << ecs->NumFileErrors << endl; |
- } |
- if (result != S_OK) |
- throw CSystemException(result); |
- return NExitCode::kFatalError; |
- } |
- if (result != S_OK) |
- throw CSystemException(result); |
- if (stat.NumFolders != 0) |
- stdStream << "Folders: " << stat.NumFolders << endl; |
- if (stat.NumFiles != 1 || stat.NumFolders != 0) |
- stdStream << "Files: " << stat.NumFiles << endl; |
- stdStream |
- << "Size: " << stat.UnpackSize << endl |
- << "Compressed: " << stat.PackSize << endl; |
- } |
- else |
- { |
- UInt64 numErrors = 0; |
- HRESULT result = ListArchives( |
- codecs, |
- formatIndices, |
- options.ArchivePathsSorted, |
- options.ArchivePathsFullSorted, |
- options.WildcardCensor.Pairs.Front().Head, |
- options.EnableHeaders, |
- options.TechMode, |
- #ifndef _NO_CRYPTO |
- options.PasswordEnabled, |
- options.Password, |
- #endif |
- numErrors); |
- if (numErrors > 0) |
- { |
- g_StdOut << endl << "Errors: " << numErrors; |
- return NExitCode::kFatalError; |
- } |
- if (result != S_OK) |
- throw CSystemException(result); |
- } |
- } |
- else if(options.Command.IsFromUpdateGroup()) |
- { |
- UString workingDir; |
- |
- CUpdateOptions &uo = options.UpdateOptions; |
- if (uo.SfxMode && uo.SfxModule.IsEmpty()) |
- uo.SfxModule = kDefaultSfxModule; |
- |
- COpenCallbackConsole openCallback; |
- openCallback.OutStream = &stdStream; |
- |
- #ifndef _NO_CRYPTO |
- bool passwordIsDefined = |
- options.PasswordEnabled && !options.Password.IsEmpty(); |
- openCallback.PasswordIsDefined = passwordIsDefined; |
- openCallback.Password = options.Password; |
- #endif |
- |
- CUpdateCallbackConsole callback; |
- callback.EnablePercents = options.EnablePercents; |
- |
- #ifndef _NO_CRYPTO |
- callback.PasswordIsDefined = passwordIsDefined; |
- callback.AskPassword = options.PasswordEnabled && options.Password.IsEmpty(); |
- callback.Password = options.Password; |
- #endif |
- callback.StdOutMode = uo.StdOutMode; |
- callback.Init(&stdStream); |
- |
- CUpdateErrorInfo errorInfo; |
- |
- if (!uo.Init(codecs, formatIndices, options.ArchiveName)) |
- throw kUnsupportedArcTypeMessage; |
- HRESULT result = UpdateArchive(codecs, |
- options.WildcardCensor, uo, |
- errorInfo, &openCallback, &callback); |
- |
- int exitCode = NExitCode::kSuccess; |
- if (callback.CantFindFiles.Size() > 0) |
- { |
- stdStream << endl; |
- stdStream << "WARNINGS for files:" << endl << endl; |
- int numErrors = callback.CantFindFiles.Size(); |
- for (int i = 0; i < numErrors; i++) |
- { |
- stdStream << callback.CantFindFiles[i] << " : "; |
- stdStream << NError::MyFormatMessageW(callback.CantFindCodes[i]) << endl; |
- } |
- stdStream << "----------------" << endl; |
- stdStream << "WARNING: Cannot find " << numErrors << " file"; |
- if (numErrors > 1) |
- stdStream << "s"; |
- stdStream << endl; |
- exitCode = NExitCode::kWarning; |
- } |
- |
- if (result != S_OK) |
- { |
- UString message; |
- if (!errorInfo.Message.IsEmpty()) |
- { |
- message += errorInfo.Message; |
- message += L"\n"; |
- } |
- if (!errorInfo.FileName.IsEmpty()) |
- { |
- message += errorInfo.FileName; |
- message += L"\n"; |
- } |
- if (!errorInfo.FileName2.IsEmpty()) |
- { |
- message += errorInfo.FileName2; |
- message += L"\n"; |
- } |
- if (errorInfo.SystemError != 0) |
- { |
- message += NError::MyFormatMessageW(errorInfo.SystemError); |
- message += L"\n"; |
- } |
- if (!message.IsEmpty()) |
- stdStream << L"\nError:\n" << message; |
- throw CSystemException(result); |
- } |
- int numErrors = callback.FailedFiles.Size(); |
- if (numErrors == 0) |
- { |
- if (callback.CantFindFiles.Size() == 0) |
- stdStream << kEverythingIsOk << endl; |
- } |
- else |
- { |
- stdStream << endl; |
- stdStream << "WARNINGS for files:" << endl << endl; |
- for (int i = 0; i < numErrors; i++) |
- { |
- stdStream << callback.FailedFiles[i] << " : "; |
- stdStream << NError::MyFormatMessageW(callback.FailedCodes[i]) << endl; |
- } |
- stdStream << "----------------" << endl; |
- stdStream << "WARNING: Cannot open " << numErrors << " file"; |
- if (numErrors > 1) |
- stdStream << "s"; |
- stdStream << endl; |
- exitCode = NExitCode::kWarning; |
- } |
- return exitCode; |
- } |
- else |
- PrintHelpAndExit(stdStream); |
- return 0; |
-} |