1 /* Lzma86Dec.c -- LZMA + x86 (BCJ) Filter Decoder
10 #include "../LzmaDec.h"
12 #define LZMA86_SIZE_OFFSET (1 + LZMA_PROPS_SIZE)
13 #define LZMA86_HEADER_SIZE (LZMA86_SIZE_OFFSET + 8)
15 static void *SzAlloc(void *p
, size_t size
) { p
= p
; return MyAlloc(size
); }
16 static void SzFree(void *p
, void *address
) { p
= p
; MyFree(address
); }
17 static ISzAlloc g_Alloc
= { SzAlloc
, SzFree
};
19 SRes
Lzma86_GetUnpackSize(const Byte
*src
, SizeT srcLen
, UInt64
*unpackSize
)
22 if (srcLen
< LZMA86_HEADER_SIZE
)
23 return SZ_ERROR_INPUT_EOF
;
25 for (i
= 0; i
< sizeof(UInt64
); i
++)
26 *unpackSize
+= ((UInt64
)src
[LZMA86_SIZE_OFFSET
+ i
]) << (8 * i
);
30 SRes
Lzma86_Decode(Byte
*dest
, SizeT
*destLen
, const Byte
*src
, SizeT
*srcLen
)
37 if (*srcLen
< LZMA86_HEADER_SIZE
)
38 return SZ_ERROR_INPUT_EOF
;
45 return SZ_ERROR_UNSUPPORTED
;
48 inSizePure
= *srcLen
- LZMA86_HEADER_SIZE
;
49 res
= LzmaDecode(dest
, destLen
, src
+ LZMA86_HEADER_SIZE
, &inSizePure
,
50 src
+ 1, LZMA_PROPS_SIZE
, LZMA_FINISH_ANY
, &status
, &g_Alloc
);
51 *srcLen
= inSizePure
+ LZMA86_HEADER_SIZE
;
57 x86_Convert_Init(x86State
);
58 x86_Convert(dest
, *destLen
, 0, &x86State
, 0);