| Index: third_party/lzma/v4_65/files/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp
|
| diff --git a/third_party/lzma/v4_65/files/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp b/third_party/lzma/v4_65/files/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp
|
| deleted file mode 100644
|
| index 4044c86de679f92cf0b282f006d8d440338d4bbe..0000000000000000000000000000000000000000
|
| --- a/third_party/lzma/v4_65/files/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp
|
| +++ /dev/null
|
| @@ -1,534 +0,0 @@
|
| -// LzmaAlone.cpp
|
| -
|
| -#include "StdAfx.h"
|
| -
|
| -#include "../../../Common/MyWindows.h"
|
| -#include "../../../Common/MyInitGuid.h"
|
| -
|
| -#include <stdio.h>
|
| -
|
| -#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
|
| -#include <fcntl.h>
|
| -#include <io.h>
|
| -#define MY_SET_BINARY_MODE(file) _setmode(_fileno(file), O_BINARY)
|
| -#else
|
| -#define MY_SET_BINARY_MODE(file)
|
| -#endif
|
| -
|
| -#include "../../../Common/CommandLineParser.h"
|
| -#include "../../../Common/StringConvert.h"
|
| -#include "../../../Common/StringToInt.h"
|
| -
|
| -#include "../../Common/FileStreams.h"
|
| -#include "../../Common/StreamUtils.h"
|
| -
|
| -#include "../LzmaDecoder.h"
|
| -#include "../LzmaEncoder.h"
|
| -
|
| -#include "LzmaBenchCon.h"
|
| -
|
| -#ifdef COMPRESS_MF_MT
|
| -#include "../../../Windows/System.h"
|
| -#endif
|
| -
|
| -extern "C"
|
| -{
|
| - #include "../../../../C/7zVersion.h"
|
| - #include "../../../../C/Alloc.h"
|
| - #include "../../../../C/LzmaUtil/Lzma86Dec.h"
|
| - #include "../../../../C/LzmaUtil/Lzma86Enc.h"
|
| -}
|
| -
|
| -using namespace NCommandLineParser;
|
| -
|
| -#ifdef _WIN32
|
| -bool g_IsNT = false;
|
| -static inline bool IsItWindowsNT()
|
| -{
|
| - OSVERSIONINFO versionInfo;
|
| - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);
|
| - if (!::GetVersionEx(&versionInfo))
|
| - return false;
|
| - return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT);
|
| -}
|
| -#endif
|
| -
|
| -static const char *kCantAllocate = "Can not allocate memory";
|
| -static const char *kReadError = "Read error";
|
| -static const char *kWriteError = "Write error";
|
| -
|
| -namespace NKey {
|
| -enum Enum
|
| -{
|
| - kHelp1 = 0,
|
| - kHelp2,
|
| - kAlgo,
|
| - kDict,
|
| - kFb,
|
| - kMc,
|
| - kLc,
|
| - kLp,
|
| - kPb,
|
| - kMatchFinder,
|
| - kMultiThread,
|
| - kEOS,
|
| - kStdIn,
|
| - kStdOut,
|
| - kFilter86
|
| -};
|
| -}
|
| -
|
| -static const CSwitchForm kSwitchForms[] =
|
| -{
|
| - { L"?", NSwitchType::kSimple, false },
|
| - { L"H", NSwitchType::kSimple, false },
|
| - { L"A", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"D", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"FB", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"MC", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"LC", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"LP", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"PB", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"MF", NSwitchType::kUnLimitedPostString, false, 1 },
|
| - { L"MT", NSwitchType::kUnLimitedPostString, false, 0 },
|
| - { L"EOS", NSwitchType::kSimple, false },
|
| - { L"SI", NSwitchType::kSimple, false },
|
| - { L"SO", NSwitchType::kSimple, false },
|
| - { L"F86", NSwitchType::kPostChar, false, 0, 0, L"+" }
|
| -};
|
| -
|
| -static const int kNumSwitches = sizeof(kSwitchForms) / sizeof(kSwitchForms[0]);
|
| -
|
| -static void PrintHelp()
|
| -{
|
| - fprintf(stderr, "\nUsage: LZMA <e|d> inputFile outputFile [<switches>...]\n"
|
| - " e: encode file\n"
|
| - " d: decode file\n"
|
| - " b: Benchmark\n"
|
| - "<Switches>\n"
|
| - " -a{N}: set compression mode - [0, 1], default: 1 (max)\n"
|
| - " -d{N}: set dictionary size - [12, 30], default: 23 (8MB)\n"
|
| - " -fb{N}: set number of fast bytes - [5, 273], default: 128\n"
|
| - " -mc{N}: set number of cycles for match finder\n"
|
| - " -lc{N}: set number of literal context bits - [0, 8], default: 3\n"
|
| - " -lp{N}: set number of literal pos bits - [0, 4], default: 0\n"
|
| - " -pb{N}: set number of pos bits - [0, 4], default: 2\n"
|
| - " -mf{MF_ID}: set Match Finder: [bt2, bt3, bt4, hc4], default: bt4\n"
|
| - " -mt{N}: set number of CPU threads\n"
|
| - " -eos: write End Of Stream marker\n"
|
| - " -si: read data from stdin\n"
|
| - " -so: write data to stdout\n"
|
| - );
|
| -}
|
| -
|
| -static void PrintHelpAndExit(const char *s)
|
| -{
|
| - fprintf(stderr, "\nError: %s\n\n", s);
|
| - PrintHelp();
|
| - throw -1;
|
| -}
|
| -
|
| -static void IncorrectCommand()
|
| -{
|
| - PrintHelpAndExit("Incorrect command");
|
| -}
|
| -
|
| -static void WriteArgumentsToStringList(int numArguments, const char *arguments[],
|
| - UStringVector &strings)
|
| -{
|
| - for(int i = 1; i < numArguments; i++)
|
| - strings.Add(MultiByteToUnicodeString(arguments[i]));
|
| -}
|
| -
|
| -static bool GetNumber(const wchar_t *s, UInt32 &value)
|
| -{
|
| - value = 0;
|
| - if (MyStringLen(s) == 0)
|
| - return false;
|
| - const wchar_t *end;
|
| - UInt64 res = ConvertStringToUInt64(s, &end);
|
| - if (*end != L'\0')
|
| - return false;
|
| - if (res > 0xFFFFFFFF)
|
| - return false;
|
| - value = UInt32(res);
|
| - return true;
|
| -}
|
| -
|
| -static void ParseUInt32(const CParser &parser, int index, UInt32 &res)
|
| -{
|
| - if (parser[index].ThereIs)
|
| - if (!GetNumber(parser[index].PostStrings[0], res))
|
| - IncorrectCommand();
|
| -}
|
| -
|
| -int main2(int n, const char *args[])
|
| -{
|
| - #ifdef _WIN32
|
| - g_IsNT = IsItWindowsNT();
|
| - #endif
|
| -
|
| - fprintf(stderr, "\nLZMA " MY_VERSION_COPYRIGHT_DATE "\n");
|
| -
|
| - if (n == 1)
|
| - {
|
| - PrintHelp();
|
| - return 0;
|
| - }
|
| -
|
| - bool unsupportedTypes = (sizeof(Byte) != 1 || sizeof(UInt32) < 4 || sizeof(UInt64) < 4);
|
| - if (unsupportedTypes)
|
| - {
|
| - fprintf(stderr, "Unsupported base types. Edit Common/Types.h and recompile");
|
| - return 1;
|
| - }
|
| -
|
| - UStringVector commandStrings;
|
| - WriteArgumentsToStringList(n, args, commandStrings);
|
| - CParser parser(kNumSwitches);
|
| - try
|
| - {
|
| - parser.ParseStrings(kSwitchForms, commandStrings);
|
| - }
|
| - catch(...)
|
| - {
|
| - IncorrectCommand();
|
| - }
|
| -
|
| - if(parser[NKey::kHelp1].ThereIs || parser[NKey::kHelp2].ThereIs)
|
| - {
|
| - PrintHelp();
|
| - return 0;
|
| - }
|
| - const UStringVector &nonSwitchStrings = parser.NonSwitchStrings;
|
| -
|
| - int paramIndex = 0;
|
| - if (paramIndex >= nonSwitchStrings.Size())
|
| - IncorrectCommand();
|
| - const UString &command = nonSwitchStrings[paramIndex++];
|
| -
|
| - bool dictDefined = false;
|
| - UInt32 dict = (UInt32)-1;
|
| - if(parser[NKey::kDict].ThereIs)
|
| - {
|
| - UInt32 dicLog;
|
| - if (!GetNumber(parser[NKey::kDict].PostStrings[0], dicLog))
|
| - IncorrectCommand();
|
| - dict = 1 << dicLog;
|
| - dictDefined = true;
|
| - }
|
| - UString mf = L"BT4";
|
| - if (parser[NKey::kMatchFinder].ThereIs)
|
| - mf = parser[NKey::kMatchFinder].PostStrings[0];
|
| -
|
| - UInt32 numThreads = (UInt32)-1;
|
| -
|
| - #ifdef COMPRESS_MF_MT
|
| - if (parser[NKey::kMultiThread].ThereIs)
|
| - {
|
| - UInt32 numCPUs = NWindows::NSystem::GetNumberOfProcessors();
|
| - const UString &s = parser[NKey::kMultiThread].PostStrings[0];
|
| - if (s.IsEmpty())
|
| - numThreads = numCPUs;
|
| - else
|
| - if (!GetNumber(s, numThreads))
|
| - IncorrectCommand();
|
| - }
|
| - #endif
|
| -
|
| - if (command.CompareNoCase(L"b") == 0)
|
| - {
|
| - const UInt32 kNumDefaultItereations = 1;
|
| - UInt32 numIterations = kNumDefaultItereations;
|
| - {
|
| - if (paramIndex < nonSwitchStrings.Size())
|
| - if (!GetNumber(nonSwitchStrings[paramIndex++], numIterations))
|
| - numIterations = kNumDefaultItereations;
|
| - }
|
| - return LzmaBenchCon(stderr, numIterations, numThreads, dict);
|
| - }
|
| -
|
| - if (numThreads == (UInt32)-1)
|
| - numThreads = 1;
|
| -
|
| - bool encodeMode = false;
|
| - if (command.CompareNoCase(L"e") == 0)
|
| - encodeMode = true;
|
| - else if (command.CompareNoCase(L"d") == 0)
|
| - encodeMode = false;
|
| - else
|
| - IncorrectCommand();
|
| -
|
| - bool stdInMode = parser[NKey::kStdIn].ThereIs;
|
| - bool stdOutMode = parser[NKey::kStdOut].ThereIs;
|
| -
|
| - CMyComPtr<ISequentialInStream> inStream;
|
| - CInFileStream *inStreamSpec = 0;
|
| - if (stdInMode)
|
| - {
|
| - inStream = new CStdInFileStream;
|
| - MY_SET_BINARY_MODE(stdin);
|
| - }
|
| - else
|
| - {
|
| - if (paramIndex >= nonSwitchStrings.Size())
|
| - IncorrectCommand();
|
| - const UString &inputName = nonSwitchStrings[paramIndex++];
|
| - inStreamSpec = new CInFileStream;
|
| - inStream = inStreamSpec;
|
| - if (!inStreamSpec->Open(GetSystemString(inputName)))
|
| - {
|
| - fprintf(stderr, "\nError: can not open input file %s\n",
|
| - (const char *)GetOemString(inputName));
|
| - return 1;
|
| - }
|
| - }
|
| -
|
| - CMyComPtr<ISequentialOutStream> outStream;
|
| - COutFileStream *outStreamSpec = NULL;
|
| - if (stdOutMode)
|
| - {
|
| - outStream = new CStdOutFileStream;
|
| - MY_SET_BINARY_MODE(stdout);
|
| - }
|
| - else
|
| - {
|
| - if (paramIndex >= nonSwitchStrings.Size())
|
| - IncorrectCommand();
|
| - const UString &outputName = nonSwitchStrings[paramIndex++];
|
| - outStreamSpec = new COutFileStream;
|
| - outStream = outStreamSpec;
|
| - if (!outStreamSpec->Create(GetSystemString(outputName), true))
|
| - {
|
| - fprintf(stderr, "\nError: can not open output file %s\n",
|
| - (const char *)GetOemString(outputName));
|
| - return 1;
|
| - }
|
| - }
|
| -
|
| - if (parser[NKey::kFilter86].ThereIs)
|
| - {
|
| - // -f86 switch is for x86 filtered mode: BCJ + LZMA.
|
| - if (parser[NKey::kEOS].ThereIs || stdInMode)
|
| - throw "Can not use stdin in this mode";
|
| - UInt64 fileSize;
|
| - inStreamSpec->File.GetLength(fileSize);
|
| - if (fileSize > 0xF0000000)
|
| - throw "File is too big";
|
| - size_t inSize = (size_t)fileSize;
|
| - Byte *inBuffer = 0;
|
| - if (inSize != 0)
|
| - {
|
| - inBuffer = (Byte *)MyAlloc((size_t)inSize);
|
| - if (inBuffer == 0)
|
| - throw kCantAllocate;
|
| - }
|
| -
|
| - if (ReadStream_FAIL(inStream, inBuffer, inSize) != S_OK)
|
| - throw "Can not read";
|
| -
|
| - Byte *outBuffer = 0;
|
| - size_t outSize;
|
| - if (encodeMode)
|
| - {
|
| - // we allocate 105% of original size for output buffer
|
| - outSize = (size_t)fileSize / 20 * 21 + (1 << 16);
|
| - if (outSize != 0)
|
| - {
|
| - outBuffer = (Byte *)MyAlloc((size_t)outSize);
|
| - if (outBuffer == 0)
|
| - throw kCantAllocate;
|
| - }
|
| - if (!dictDefined)
|
| - dict = 1 << 23;
|
| - int res = Lzma86_Encode(outBuffer, &outSize, inBuffer, inSize,
|
| - 5, dict, parser[NKey::kFilter86].PostCharIndex == 0 ? SZ_FILTER_YES : SZ_FILTER_AUTO);
|
| - if (res != 0)
|
| - {
|
| - fprintf(stderr, "\nEncoder error = %d\n", (int)res);
|
| - return 1;
|
| - }
|
| - }
|
| - else
|
| - {
|
| - UInt64 outSize64;
|
| - if (Lzma86_GetUnpackSize(inBuffer, inSize, &outSize64) != 0)
|
| - throw "data error";
|
| - outSize = (size_t)outSize64;
|
| - if (outSize != outSize64)
|
| - throw "too big";
|
| - if (outSize != 0)
|
| - {
|
| - outBuffer = (Byte *)MyAlloc(outSize);
|
| - if (outBuffer == 0)
|
| - throw kCantAllocate;
|
| - }
|
| - int res = Lzma86_Decode(outBuffer, &outSize, inBuffer, &inSize);
|
| - if (inSize != (size_t)fileSize)
|
| - throw "incorrect processed size";
|
| - if (res != 0)
|
| - throw "LzmaDecoder error";
|
| - }
|
| - if (WriteStream(outStream, outBuffer, outSize) != S_OK)
|
| - throw kWriteError;
|
| - MyFree(outBuffer);
|
| - MyFree(inBuffer);
|
| - return 0;
|
| - }
|
| -
|
| -
|
| - UInt64 fileSize;
|
| - if (encodeMode)
|
| - {
|
| - NCompress::NLzma::CEncoder *encoderSpec = new NCompress::NLzma::CEncoder;
|
| - CMyComPtr<ICompressCoder> encoder = encoderSpec;
|
| -
|
| - if (!dictDefined)
|
| - dict = 1 << 23;
|
| -
|
| - UInt32 pb = 2;
|
| - UInt32 lc = 3; // = 0; for 32-bit data
|
| - UInt32 lp = 0; // = 2; for 32-bit data
|
| - UInt32 algo = 1;
|
| - UInt32 fb = 128;
|
| - UInt32 mc = 16 + fb / 2;
|
| - bool mcDefined = false;
|
| -
|
| - bool eos = parser[NKey::kEOS].ThereIs || stdInMode;
|
| -
|
| - ParseUInt32(parser, NKey::kAlgo, algo);
|
| - ParseUInt32(parser, NKey::kFb, fb);
|
| - ParseUInt32(parser, NKey::kLc, lc);
|
| - ParseUInt32(parser, NKey::kLp, lp);
|
| - ParseUInt32(parser, NKey::kPb, pb);
|
| -
|
| - mcDefined = parser[NKey::kMc].ThereIs;
|
| - if (mcDefined)
|
| - if (!GetNumber(parser[NKey::kMc].PostStrings[0], mc))
|
| - IncorrectCommand();
|
| -
|
| - PROPID propIDs[] =
|
| - {
|
| - NCoderPropID::kDictionarySize,
|
| - NCoderPropID::kPosStateBits,
|
| - NCoderPropID::kLitContextBits,
|
| - NCoderPropID::kLitPosBits,
|
| - NCoderPropID::kAlgorithm,
|
| - NCoderPropID::kNumFastBytes,
|
| - NCoderPropID::kMatchFinder,
|
| - NCoderPropID::kEndMarker,
|
| - NCoderPropID::kNumThreads,
|
| - NCoderPropID::kMatchFinderCycles,
|
| - };
|
| - const int kNumPropsMax = sizeof(propIDs) / sizeof(propIDs[0]);
|
| -
|
| - PROPVARIANT props[kNumPropsMax];
|
| - for (int p = 0; p < 6; p++)
|
| - props[p].vt = VT_UI4;
|
| -
|
| - props[0].ulVal = (UInt32)dict;
|
| - props[1].ulVal = (UInt32)pb;
|
| - props[2].ulVal = (UInt32)lc;
|
| - props[3].ulVal = (UInt32)lp;
|
| - props[4].ulVal = (UInt32)algo;
|
| - props[5].ulVal = (UInt32)fb;
|
| -
|
| - props[6].vt = VT_BSTR;
|
| - props[6].bstrVal = (BSTR)(const wchar_t *)mf;
|
| -
|
| - props[7].vt = VT_BOOL;
|
| - props[7].boolVal = eos ? VARIANT_TRUE : VARIANT_FALSE;
|
| -
|
| - props[8].vt = VT_UI4;
|
| - props[8].ulVal = (UInt32)numThreads;
|
| -
|
| - // it must be last in property list
|
| - props[9].vt = VT_UI4;
|
| - props[9].ulVal = (UInt32)mc;
|
| -
|
| - int numProps = kNumPropsMax;
|
| - if (!mcDefined)
|
| - numProps--;
|
| -
|
| - if (encoderSpec->SetCoderProperties(propIDs, props, numProps) != S_OK)
|
| - IncorrectCommand();
|
| - encoderSpec->WriteCoderProperties(outStream);
|
| -
|
| - if (eos || stdInMode)
|
| - fileSize = (UInt64)(Int64)-1;
|
| - else
|
| - inStreamSpec->File.GetLength(fileSize);
|
| -
|
| - for (int i = 0; i < 8; i++)
|
| - {
|
| - Byte b = Byte(fileSize >> (8 * i));
|
| - if (outStream->Write(&b, 1, 0) != S_OK)
|
| - {
|
| - fprintf(stderr, kWriteError);
|
| - return 1;
|
| - }
|
| - }
|
| - HRESULT result = encoder->Code(inStream, outStream, 0, 0, 0);
|
| - if (result == E_OUTOFMEMORY)
|
| - {
|
| - fprintf(stderr, "\nError: Can not allocate memory\n");
|
| - return 1;
|
| - }
|
| - else if (result != S_OK)
|
| - {
|
| - fprintf(stderr, "\nEncoder error = %X\n", (unsigned int)result);
|
| - return 1;
|
| - }
|
| - }
|
| - else
|
| - {
|
| - NCompress::NLzma::CDecoder *decoderSpec = new NCompress::NLzma::CDecoder;
|
| - CMyComPtr<ICompressCoder> decoder = decoderSpec;
|
| - decoderSpec->FinishStream = true;
|
| - const UInt32 kPropertiesSize = 5;
|
| - Byte header[kPropertiesSize + 8];
|
| - if (ReadStream_FALSE(inStream, header, kPropertiesSize + 8) != S_OK)
|
| - {
|
| - fprintf(stderr, kReadError);
|
| - return 1;
|
| - }
|
| - if (decoderSpec->SetDecoderProperties2(header, kPropertiesSize) != S_OK)
|
| - {
|
| - fprintf(stderr, "SetDecoderProperties error");
|
| - return 1;
|
| - }
|
| - fileSize = 0;
|
| - for (int i = 0; i < 8; i++)
|
| - fileSize |= ((UInt64)header[kPropertiesSize + i]) << (8 * i);
|
| -
|
| - if (decoder->Code(inStream, outStream, 0, (fileSize == (UInt64)(Int64)-1) ? 0 : &fileSize, 0) != S_OK)
|
| - {
|
| - fprintf(stderr, "Decoder error");
|
| - return 1;
|
| - }
|
| - }
|
| - if (outStreamSpec != NULL)
|
| - {
|
| - if (outStreamSpec->Close() != S_OK)
|
| - {
|
| - fprintf(stderr, "File closing error");
|
| - return 1;
|
| - }
|
| - }
|
| - return 0;
|
| -}
|
| -
|
| -int MY_CDECL main(int n, const char *args[])
|
| -{
|
| - try { return main2(n, args); }
|
| - catch(const char *s)
|
| - {
|
| - fprintf(stderr, "\nError: %s\n", s);
|
| - return 1;
|
| - }
|
| - catch(...)
|
| - {
|
| - fprintf(stderr, "\nError\n");
|
| - return 1;
|
| - }
|
| -}
|
|
|