4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LZMA Compress/Decompress tool (LzmaCompress)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Based on LZMA SDK 4.65:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LzmaUtil.c -- Test application for LZMA compression
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 2008-11-23 : Igor Pavlov : Public domain
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Sdk/C/Alloc.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Sdk/C/7zFile.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Sdk/C/7zVersion.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Sdk/C/LzmaDec.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Sdk/C/LzmaEnc.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Sdk/C/Bra.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncconst char *kCantReadMessage = "Can not read input file";
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncconst char *kCantWriteMessage = "Can not write output file";
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncconst char *kCantAllocateMessage = "Can not allocate memory";
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic void SzFree(void *p, void *address) { p = p; MyFree(address); }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "Copyright (c) 2009-2012, Intel Corporation. All rights reserved."
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "Based on LZMA Utility " MY_VERSION_COPYRIGHT_DATE "\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "\nUsage: LzmaCompress -e|-d [options] <inputFile>\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " -e: encode file\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " -d: decode file\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " -o FileName, --output FileName: specify the output filename\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " --f86: enable converter for x86 code\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " -v, --verbose: increase output messages\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " -q, --quiet: reduce output messages\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " --debug [0-9]: set debug level\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " --version: display the program version and exit\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " -h, --help: display this help text\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sprintf(buffer + strlen(buffer), "\nError code: %x\n", (unsigned)val);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sprintf (buffer, "%s Version %d.%d %s ", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION, __BUILD_VERSION);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic SRes Encode(ISeqOutStream *outStream, ISeqInStream *inStream, UInt64 fileSize)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (SeqInStream_Read(inStream, inBuffer, inSize) != SZ_OK) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // we allocate 105% of original size + 64KB for output buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i = 0; i < 8; i++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync outBuffer[i + LZMA_PROPS_SIZE] = (Byte)(fileSize >> (8 * i));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync x86_Convert(filteredStream, (SizeT) inSize, 0, &x86State, 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync size_t outSizeProcessed = outSize - LZMA_HEADER_SIZE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync res = LzmaEncode(outBuffer + LZMA_HEADER_SIZE, &outSizeProcessed,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mConType != NoConverter ? filteredStream : inBuffer, inSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (outStream->Write(outStream, outBuffer, outSize) != outSize)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic SRes Decode(ISeqOutStream *outStream, ISeqInStream *inStream, UInt64 fileSize)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (SeqInStream_Read(inStream, inBuffer, inSize) != SZ_OK) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i = 0; i < 8; i++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync outSize64 += ((UInt64)inBuffer[LZMA_PROPS_SIZE + i]) << (i * 8);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync res = LzmaDecode(outBuffer, &outSize, inBuffer + LZMA_HEADER_SIZE, &inSizePure,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync inBuffer, LZMA_PROPS_SIZE, LZMA_FINISH_END, &status, &g_Alloc);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync x86_Convert(outBuffer, (SizeT) outSize, 0, &x86State, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (outStream->Write(outStream, outBuffer, outSize) != outSize)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncint main2(int numArgs, const char *args[], char *rs)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (strcmp(args[param], "-e") == 0 || strcmp(args[param], "-d") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // For now we silently ignore this parameter to achieve command line
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // parameter compatibility with other build tools.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // For now we silently ignore this parameter to achieve command line
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // parameter compatibility with other build tools.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (strcmp(args[param], "--version") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return PrintError(rs, "Incorrect UInt32 or UInt64");