1 /* Lzma86Dec.c -- LZMA + x86 (BCJ) Filter Decoder
\r
2 2009-08-14 : Igor Pavlov : Public domain */
\r
10 static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); }
\r
11 static void SzFree(void *p, void *address) { p = p; MyFree(address); }
\r
13 SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize)
\r
16 if (srcLen < LZMA86_HEADER_SIZE)
\r
17 return SZ_ERROR_INPUT_EOF;
\r
19 for (i = 0; i < sizeof(UInt64); i++)
\r
20 *unpackSize += ((UInt64)src[LZMA86_SIZE_OFFSET + i]) << (8 * i);
\r
24 SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen)
\r
26 ISzAlloc g_Alloc = { SzAlloc, SzFree };
\r
32 if (*srcLen < LZMA86_HEADER_SIZE)
\r
33 return SZ_ERROR_INPUT_EOF;
\r
40 return SZ_ERROR_UNSUPPORTED;
\r
43 inSizePure = *srcLen - LZMA86_HEADER_SIZE;
\r
44 res = LzmaDecode(dest, destLen, src + LZMA86_HEADER_SIZE, &inSizePure,
\r
45 src + 1, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &status, &g_Alloc);
\r
46 *srcLen = inSizePure + LZMA86_HEADER_SIZE;
\r
52 x86_Convert_Init(x86State);
\r
53 x86_Convert(dest, *destLen, 0, &x86State, 0);
\r