mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-29 23:42:33 +00:00
718112a8fe
Currently none of these is being used, but eventually they will, once more code gets ported over. So it's better to have them right away and avoid editing the project file too much, only to revert that later.
120 lines
3.6 KiB
C
120 lines
3.6 KiB
C
/* Lzma2Dec.h -- LZMA2 Decoder
|
|
2018-02-19 : Igor Pavlov : Public domain */
|
|
|
|
#ifndef __LZMA2_DEC_H
|
|
#define __LZMA2_DEC_H
|
|
|
|
#include "LzmaDec.h"
|
|
|
|
EXTERN_C_BEGIN
|
|
|
|
/* ---------- State Interface ---------- */
|
|
|
|
typedef struct
|
|
{
|
|
unsigned state;
|
|
Byte control;
|
|
Byte needInitLevel;
|
|
Byte isExtraMode;
|
|
Byte _pad_;
|
|
UInt32 packSize;
|
|
UInt32 unpackSize;
|
|
CLzmaDec decoder;
|
|
} CLzma2Dec;
|
|
|
|
#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder)
|
|
#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc)
|
|
#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc)
|
|
|
|
SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
|
|
SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
|
|
void Lzma2Dec_Init(CLzma2Dec *p);
|
|
|
|
/*
|
|
finishMode:
|
|
It has meaning only if the decoding reaches output limit (*destLen or dicLimit).
|
|
LZMA_FINISH_ANY - use smallest number of input bytes
|
|
LZMA_FINISH_END - read EndOfStream marker after decoding
|
|
|
|
Returns:
|
|
SZ_OK
|
|
status:
|
|
LZMA_STATUS_FINISHED_WITH_MARK
|
|
LZMA_STATUS_NOT_FINISHED
|
|
LZMA_STATUS_NEEDS_MORE_INPUT
|
|
SZ_ERROR_DATA - Data error
|
|
*/
|
|
|
|
SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
|
|
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
|
|
|
|
SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen,
|
|
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
|
|
|
|
|
|
/* ---------- LZMA2 block and chunk parsing ---------- */
|
|
|
|
/*
|
|
Lzma2Dec_Parse() parses compressed data stream up to next independent block or next chunk data.
|
|
It can return LZMA_STATUS_* code or LZMA2_PARSE_STATUS_* code:
|
|
- LZMA2_PARSE_STATUS_NEW_BLOCK - there is new block, and 1 additional byte (control byte of next block header) was read from input.
|
|
- LZMA2_PARSE_STATUS_NEW_CHUNK - there is new chunk, and only lzma2 header of new chunk was read.
|
|
CLzma2Dec::unpackSize contains unpack size of that chunk
|
|
*/
|
|
|
|
typedef enum
|
|
{
|
|
/*
|
|
LZMA_STATUS_NOT_SPECIFIED // data error
|
|
LZMA_STATUS_FINISHED_WITH_MARK
|
|
LZMA_STATUS_NOT_FINISHED //
|
|
LZMA_STATUS_NEEDS_MORE_INPUT
|
|
LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK // unused
|
|
*/
|
|
LZMA2_PARSE_STATUS_NEW_BLOCK = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + 1,
|
|
LZMA2_PARSE_STATUS_NEW_CHUNK
|
|
} ELzma2ParseStatus;
|
|
|
|
ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
|
|
SizeT outSize, // output size
|
|
const Byte *src, SizeT *srcLen,
|
|
int checkFinishBlock // set (checkFinishBlock = 1), if it must read full input data, if decoder.dicPos reaches blockMax position.
|
|
);
|
|
|
|
/*
|
|
LZMA2 parser doesn't decode LZMA chunks, so we must read
|
|
full input LZMA chunk to decode some part of LZMA chunk.
|
|
|
|
Lzma2Dec_GetUnpackExtra() returns the value that shows
|
|
max possible number of output bytes that can be output by decoder
|
|
at current input positon.
|
|
*/
|
|
|
|
#define Lzma2Dec_GetUnpackExtra(p) ((p)->isExtraMode ? (p)->unpackSize : 0);
|
|
|
|
|
|
/* ---------- One Call Interface ---------- */
|
|
|
|
/*
|
|
finishMode:
|
|
It has meaning only if the decoding reaches output limit (*destLen).
|
|
LZMA_FINISH_ANY - use smallest number of input bytes
|
|
LZMA_FINISH_END - read EndOfStream marker after decoding
|
|
|
|
Returns:
|
|
SZ_OK
|
|
status:
|
|
LZMA_STATUS_FINISHED_WITH_MARK
|
|
LZMA_STATUS_NOT_FINISHED
|
|
SZ_ERROR_DATA - Data error
|
|
SZ_ERROR_MEM - Memory allocation error
|
|
SZ_ERROR_UNSUPPORTED - Unsupported properties
|
|
SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
|
|
*/
|
|
|
|
SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
|
|
Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc);
|
|
|
|
EXTERN_C_END
|
|
|
|
#endif
|