add CHD support.
[pcsx_rearmed.git] / deps / lzma-16.04 / C / Lzma86Dec.c
1 /* Lzma86Dec.c -- LZMA + x86 (BCJ) Filter Decoder\r
2 2016-05-16 : Igor Pavlov : Public domain */\r
3 \r
4 #include "Precomp.h"\r
5 \r
6 #include "Lzma86.h"\r
7 \r
8 #include "Alloc.h"\r
9 #include "Bra.h"\r
10 #include "LzmaDec.h"\r
11 \r
12 SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize)\r
13 {\r
14   unsigned i;\r
15   if (srcLen < LZMA86_HEADER_SIZE)\r
16     return SZ_ERROR_INPUT_EOF;\r
17   *unpackSize = 0;\r
18   for (i = 0; i < sizeof(UInt64); i++)\r
19     *unpackSize += ((UInt64)src[LZMA86_SIZE_OFFSET + i]) << (8 * i);\r
20   return SZ_OK;\r
21 }\r
22 \r
23 SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen)\r
24 {\r
25   SRes res;\r
26   int useFilter;\r
27   SizeT inSizePure;\r
28   ELzmaStatus status;\r
29 \r
30   if (*srcLen < LZMA86_HEADER_SIZE)\r
31     return SZ_ERROR_INPUT_EOF;\r
32 \r
33   useFilter = src[0];\r
34 \r
35   if (useFilter > 1)\r
36   {\r
37     *destLen = 0;\r
38     return SZ_ERROR_UNSUPPORTED;\r
39   }\r
40 \r
41   inSizePure = *srcLen - LZMA86_HEADER_SIZE;\r
42   res = LzmaDecode(dest, destLen, src + LZMA86_HEADER_SIZE, &inSizePure,\r
43       src + 1, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &status, &g_Alloc);\r
44   *srcLen = inSizePure + LZMA86_HEADER_SIZE;\r
45   if (res != SZ_OK)\r
46     return res;\r
47   if (useFilter == 1)\r
48   {\r
49     UInt32 x86State;\r
50     x86_Convert_Init(x86State);\r
51     x86_Convert(dest, *destLen, 0, &x86State, 0);\r
52   }\r
53   return SZ_OK;\r
54 }\r