Index: third_party/lzma_sdk/C/Lzma86Dec.c |
=================================================================== |
--- third_party/lzma_sdk/C/Lzma86Dec.c (revision 0) |
+++ third_party/lzma_sdk/C/Lzma86Dec.c (revision 0) |
@@ -0,0 +1,56 @@ |
+/* Lzma86Dec.c -- LZMA + x86 (BCJ) Filter Decoder |
+2009-08-14 : Igor Pavlov : Public domain */ |
+ |
+#include "Lzma86.h" |
+ |
+#include "Alloc.h" |
+#include "Bra.h" |
+#include "LzmaDec.h" |
+ |
+static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } |
+static void SzFree(void *p, void *address) { p = p; MyFree(address); } |
+ |
+SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize) |
+{ |
+ unsigned i; |
+ if (srcLen < LZMA86_HEADER_SIZE) |
+ return SZ_ERROR_INPUT_EOF; |
+ *unpackSize = 0; |
+ for (i = 0; i < sizeof(UInt64); i++) |
+ *unpackSize += ((UInt64)src[LZMA86_SIZE_OFFSET + i]) << (8 * i); |
+ return SZ_OK; |
+} |
+ |
+SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen) |
+{ |
+ ISzAlloc g_Alloc = { SzAlloc, SzFree }; |
+ SRes res; |
+ int useFilter; |
+ SizeT inSizePure; |
+ ELzmaStatus status; |
+ |
+ if (*srcLen < LZMA86_HEADER_SIZE) |
+ return SZ_ERROR_INPUT_EOF; |
+ |
+ useFilter = src[0]; |
+ |
+ if (useFilter > 1) |
+ { |
+ *destLen = 0; |
+ return SZ_ERROR_UNSUPPORTED; |
+ } |
+ |
+ inSizePure = *srcLen - LZMA86_HEADER_SIZE; |
+ res = LzmaDecode(dest, destLen, src + LZMA86_HEADER_SIZE, &inSizePure, |
+ src + 1, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &status, &g_Alloc); |
+ *srcLen = inSizePure + LZMA86_HEADER_SIZE; |
+ if (res != SZ_OK) |
+ return res; |
+ if (useFilter == 1) |
+ { |
+ UInt32 x86State; |
+ x86_Convert_Init(x86State); |
+ x86_Convert(dest, *destLen, 0, &x86State, 0); |
+ } |
+ return SZ_OK; |
+} |
Property changes on: third_party\lzma_sdk\C\Lzma86Dec.c |
___________________________________________________________________ |
Added: svn:executable |
+ * |
Added: svn:eol-style |
+ LF |