| Index: third_party/lzma/v4_65/files/C/Archive/7z/7zDecode.c
|
| diff --git a/third_party/lzma/v4_65/files/C/Archive/7z/7zDecode.c b/third_party/lzma/v4_65/files/C/Archive/7z/7zDecode.c
|
| deleted file mode 100644
|
| index 02526f0e207c538d313c8f17be5b93747f65d9c6..0000000000000000000000000000000000000000
|
| --- a/third_party/lzma/v4_65/files/C/Archive/7z/7zDecode.c
|
| +++ /dev/null
|
| @@ -1,254 +0,0 @@
|
| -/* 7zDecode.c -- Decoding from 7z folder
|
| -2008-11-23 : Igor Pavlov : Public domain */
|
| -
|
| -#include <string.h>
|
| -
|
| -#include "../../Bcj2.h"
|
| -#include "../../Bra.h"
|
| -#include "../../LzmaDec.h"
|
| -#include "7zDecode.h"
|
| -
|
| -#define k_Copy 0
|
| -#define k_LZMA 0x30101
|
| -#define k_BCJ 0x03030103
|
| -#define k_BCJ2 0x0303011B
|
| -
|
| -static SRes SzDecodeLzma(CSzCoderInfo *coder, UInt64 inSize, ILookInStream *inStream,
|
| - Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain)
|
| -{
|
| - CLzmaDec state;
|
| - SRes res = SZ_OK;
|
| -
|
| - LzmaDec_Construct(&state);
|
| - RINOK(LzmaDec_AllocateProbs(&state, coder->Props.data, (unsigned)coder->Props.size, allocMain));
|
| - state.dic = outBuffer;
|
| - state.dicBufSize = outSize;
|
| - LzmaDec_Init(&state);
|
| -
|
| - for (;;)
|
| - {
|
| - Byte *inBuf = NULL;
|
| - size_t lookahead = (1 << 18);
|
| - if (lookahead > inSize)
|
| - lookahead = (size_t)inSize;
|
| - res = inStream->Look((void *)inStream, (void **)&inBuf, &lookahead);
|
| - if (res != SZ_OK)
|
| - break;
|
| -
|
| - {
|
| - SizeT inProcessed = (SizeT)lookahead, dicPos = state.dicPos;
|
| - ELzmaStatus status;
|
| - res = LzmaDec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status);
|
| - lookahead -= inProcessed;
|
| - inSize -= inProcessed;
|
| - if (res != SZ_OK)
|
| - break;
|
| - if (state.dicPos == state.dicBufSize || (inProcessed == 0 && dicPos == state.dicPos))
|
| - {
|
| - if (state.dicBufSize != outSize || lookahead != 0 ||
|
| - (status != LZMA_STATUS_FINISHED_WITH_MARK &&
|
| - status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK))
|
| - res = SZ_ERROR_DATA;
|
| - break;
|
| - }
|
| - res = inStream->Skip((void *)inStream, inProcessed);
|
| - if (res != SZ_OK)
|
| - break;
|
| - }
|
| - }
|
| -
|
| - LzmaDec_FreeProbs(&state, allocMain);
|
| - return res;
|
| -}
|
| -
|
| -static SRes SzDecodeCopy(UInt64 inSize, ILookInStream *inStream, Byte *outBuffer)
|
| -{
|
| - while (inSize > 0)
|
| - {
|
| - void *inBuf;
|
| - size_t curSize = (1 << 18);
|
| - if (curSize > inSize)
|
| - curSize = (size_t)inSize;
|
| - RINOK(inStream->Look((void *)inStream, (void **)&inBuf, &curSize));
|
| - if (curSize == 0)
|
| - return SZ_ERROR_INPUT_EOF;
|
| - memcpy(outBuffer, inBuf, curSize);
|
| - outBuffer += curSize;
|
| - inSize -= curSize;
|
| - RINOK(inStream->Skip((void *)inStream, curSize));
|
| - }
|
| - return SZ_OK;
|
| -}
|
| -
|
| -#define IS_UNSUPPORTED_METHOD(m) ((m) != k_Copy && (m) != k_LZMA)
|
| -#define IS_UNSUPPORTED_CODER(c) (IS_UNSUPPORTED_METHOD(c.MethodID) || c.NumInStreams != 1 || c.NumOutStreams != 1)
|
| -#define IS_NO_BCJ(c) (c.MethodID != k_BCJ || c.NumInStreams != 1 || c.NumOutStreams != 1)
|
| -#define IS_NO_BCJ2(c) (c.MethodID != k_BCJ2 || c.NumInStreams != 4 || c.NumOutStreams != 1)
|
| -
|
| -SRes CheckSupportedFolder(const CSzFolder *f)
|
| -{
|
| - if (f->NumCoders < 1 || f->NumCoders > 4)
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - if (IS_UNSUPPORTED_CODER(f->Coders[0]))
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - if (f->NumCoders == 1)
|
| - {
|
| - if (f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBindPairs != 0)
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - return SZ_OK;
|
| - }
|
| - if (f->NumCoders == 2)
|
| - {
|
| - if (IS_NO_BCJ(f->Coders[1]) ||
|
| - f->NumPackStreams != 1 || f->PackStreams[0] != 0 ||
|
| - f->NumBindPairs != 1 ||
|
| - f->BindPairs[0].InIndex != 1 || f->BindPairs[0].OutIndex != 0)
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - return SZ_OK;
|
| - }
|
| - if (f->NumCoders == 4)
|
| - {
|
| - if (IS_UNSUPPORTED_CODER(f->Coders[1]) ||
|
| - IS_UNSUPPORTED_CODER(f->Coders[2]) ||
|
| - IS_NO_BCJ2(f->Coders[3]))
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - if (f->NumPackStreams != 4 ||
|
| - f->PackStreams[0] != 2 ||
|
| - f->PackStreams[1] != 6 ||
|
| - f->PackStreams[2] != 1 ||
|
| - f->PackStreams[3] != 0 ||
|
| - f->NumBindPairs != 3 ||
|
| - f->BindPairs[0].InIndex != 5 || f->BindPairs[0].OutIndex != 0 ||
|
| - f->BindPairs[1].InIndex != 4 || f->BindPairs[1].OutIndex != 1 ||
|
| - f->BindPairs[2].InIndex != 3 || f->BindPairs[2].OutIndex != 2)
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - return SZ_OK;
|
| - }
|
| - return SZ_ERROR_UNSUPPORTED;
|
| -}
|
| -
|
| -UInt64 GetSum(const UInt64 *values, UInt32 index)
|
| -{
|
| - UInt64 sum = 0;
|
| - UInt32 i;
|
| - for (i = 0; i < index; i++)
|
| - sum += values[i];
|
| - return sum;
|
| -}
|
| -
|
| -SRes SzDecode2(const UInt64 *packSizes, const CSzFolder *folder,
|
| - ILookInStream *inStream, UInt64 startPos,
|
| - Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain,
|
| - Byte *tempBuf[])
|
| -{
|
| - UInt32 ci;
|
| - SizeT tempSizes[3] = { 0, 0, 0};
|
| - SizeT tempSize3 = 0;
|
| - Byte *tempBuf3 = 0;
|
| -
|
| - RINOK(CheckSupportedFolder(folder));
|
| -
|
| - for (ci = 0; ci < folder->NumCoders; ci++)
|
| - {
|
| - CSzCoderInfo *coder = &folder->Coders[ci];
|
| -
|
| - if (coder->MethodID == k_Copy || coder->MethodID == k_LZMA)
|
| - {
|
| - UInt32 si = 0;
|
| - UInt64 offset;
|
| - UInt64 inSize;
|
| - Byte *outBufCur = outBuffer;
|
| - SizeT outSizeCur = outSize;
|
| - if (folder->NumCoders == 4)
|
| - {
|
| - UInt32 indices[] = { 3, 2, 0 };
|
| - UInt64 unpackSize = folder->UnpackSizes[ci];
|
| - si = indices[ci];
|
| - if (ci < 2)
|
| - {
|
| - Byte *temp;
|
| - outSizeCur = (SizeT)unpackSize;
|
| - if (outSizeCur != unpackSize)
|
| - return SZ_ERROR_MEM;
|
| - temp = (Byte *)IAlloc_Alloc(allocMain, outSizeCur);
|
| - if (temp == 0 && outSizeCur != 0)
|
| - return SZ_ERROR_MEM;
|
| - outBufCur = tempBuf[1 - ci] = temp;
|
| - tempSizes[1 - ci] = outSizeCur;
|
| - }
|
| - else if (ci == 2)
|
| - {
|
| - if (unpackSize > outSize) /* check it */
|
| - return SZ_ERROR_PARAM;
|
| - tempBuf3 = outBufCur = outBuffer + (outSize - (size_t)unpackSize);
|
| - tempSize3 = outSizeCur = (SizeT)unpackSize;
|
| - }
|
| - else
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - }
|
| - offset = GetSum(packSizes, si);
|
| - inSize = packSizes[si];
|
| - RINOK(LookInStream_SeekTo(inStream, startPos + offset));
|
| -
|
| - if (coder->MethodID == k_Copy)
|
| - {
|
| - if (inSize != outSizeCur) /* check it */
|
| - return SZ_ERROR_DATA;
|
| - RINOK(SzDecodeCopy(inSize, inStream, outBufCur));
|
| - }
|
| - else
|
| - {
|
| - RINOK(SzDecodeLzma(coder, inSize, inStream, outBufCur, outSizeCur, allocMain));
|
| - }
|
| - }
|
| - else if (coder->MethodID == k_BCJ)
|
| - {
|
| - UInt32 state;
|
| - if (ci != 1)
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - x86_Convert_Init(state);
|
| - x86_Convert(outBuffer, outSize, 0, &state, 0);
|
| - }
|
| - else if (coder->MethodID == k_BCJ2)
|
| - {
|
| - UInt64 offset = GetSum(packSizes, 1);
|
| - UInt64 s3Size = packSizes[1];
|
| - SRes res;
|
| - if (ci != 3)
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - RINOK(LookInStream_SeekTo(inStream, startPos + offset));
|
| - tempSizes[2] = (SizeT)s3Size;
|
| - if (tempSizes[2] != s3Size)
|
| - return SZ_ERROR_MEM;
|
| - tempBuf[2] = (Byte *)IAlloc_Alloc(allocMain, tempSizes[2]);
|
| - if (tempBuf[2] == 0 && tempSizes[2] != 0)
|
| - return SZ_ERROR_MEM;
|
| - res = SzDecodeCopy(s3Size, inStream, tempBuf[2]);
|
| - RINOK(res)
|
| -
|
| - res = Bcj2_Decode(
|
| - tempBuf3, tempSize3,
|
| - tempBuf[0], tempSizes[0],
|
| - tempBuf[1], tempSizes[1],
|
| - tempBuf[2], tempSizes[2],
|
| - outBuffer, outSize);
|
| - RINOK(res)
|
| - }
|
| - else
|
| - return SZ_ERROR_UNSUPPORTED;
|
| - }
|
| - return SZ_OK;
|
| -}
|
| -
|
| -SRes SzDecode(const UInt64 *packSizes, const CSzFolder *folder,
|
| - ILookInStream *inStream, UInt64 startPos,
|
| - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain)
|
| -{
|
| - Byte *tempBuf[3] = { 0, 0, 0};
|
| - int i;
|
| - SRes res = SzDecode2(packSizes, folder, inStream, startPos,
|
| - outBuffer, (SizeT)outSize, allocMain, tempBuf);
|
| - for (i = 0; i < 3; i++)
|
| - IAlloc_Free(allocMain, tempBuf[i]);
|
| - return res;
|
| -}
|
|
|