Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* 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; }
|