15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Lzma2Dec.h -- LZMA2 Decoder 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)2009-05-03 : Igor Pavlov : Public domain */ 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __LZMA2_DEC_H 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __LZMA2_DEC_H 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "LzmaDec.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- State Interface ---------- */ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CLzmaDec decoder; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UInt32 packSize; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UInt32 unpackSize; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int state; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Byte control; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool needInitDic; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool needInitState; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool needInitProp; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} CLzma2Dec; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAlloc *alloc); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAlloc *alloc); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Lzma2Dec_Init(CLzma2Dec *p); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)finishMode: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) It has meaning only if the decoding reaches output limit (*destLen or dicLimit). 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_FINISH_ANY - use smallest number of input bytes 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_FINISH_END - read EndOfStream marker after decoding 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Returns: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_OK 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_STATUS_FINISHED_WITH_MARK 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_STATUS_NOT_FINISHED 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_STATUS_NEEDS_MORE_INPUT 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_DATA - Data error 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- One Call Interface ---------- */ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)finishMode: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) It has meaning only if the decoding reaches output limit (*destLen). 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_FINISH_ANY - use smallest number of input bytes 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_FINISH_END - read EndOfStream marker after decoding 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Returns: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_OK 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_STATUS_FINISHED_WITH_MARK 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LZMA_STATUS_NOT_FINISHED 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_DATA - Data error 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_MEM - Memory allocation error 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_UNSUPPORTED - Unsupported properties 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAlloc *alloc); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 85