blob: 3da6e936d7b049a241126883cd60b16639d5733d [file] [log] [blame]
/*
* LZMADecode.c
*
* This file is a part of LZMA compression module for NSIS.
*
* Original LZMA SDK Copyright (C) 1999-2006 Igor Pavlov
* Modifications Copyright (C) 2003-2007 Amir Szekely <kichik@netvision.net.il>
*
* Licensed under the Common Public License version 1.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licence details can be found in the file COPYING.nsis.
*
* This software is provided 'as-is', without any express or implied
* warranty.
*/
#ifndef __LZMADECODE_H
#define __LZMADECODE_H
/* #define _LZMA_PROB32 */
/* It can increase speed on some 32-bit CPUs,
but memory usage will be doubled in that case */
#ifdef __cplusplus
extern "C" {
#endif
#include "others.h"
#ifndef lzmaalloc
#define lzmaalloc cli_malloc
#endif
#ifndef lzmafree
#define lzmafree free
#endif
#ifndef LZMACALL
# define LZMACALL
#endif
#ifndef UInt32
#ifdef _LZMA_UINT32_IS_ULONG
#define UInt32 unsigned long
#else
#define UInt32 unsigned int
#endif
#endif
#ifdef _LZMA_PROB32
#define CProb UInt32
#else
#define CProb unsigned short
#endif
typedef unsigned char lzByte;
#define LZMA_STREAM_END 1
#define LZMA_OK 0
#define LZMA_DATA_ERROR -1
/* we don't really care what the problem is... */
/* #define LZMA_RESULT_NOT_ENOUGH_MEM -2 */
#define LZMA_NOT_ENOUGH_MEM -1
typedef struct
{
/* mode control */
int mode;
int last;
int last2;
int last3;
/* properties */
UInt32 dynamicDataSize;
UInt32 dictionarySize;
/* io */
lzByte *next_in; /* next input byte */
UInt32 avail_in; /* number of bytes available at next_in */
lzByte *next_out; /* next output byte should be put there */
UInt32 avail_out; /* remaining free space at next_out */
UInt32 totalOut; /* total output - not always correct when lzmaDecode returns */
/* saved state */
lzByte previousByte;
lzByte matchByte;
CProb *probs;
CProb *prob;
int mi;
int posState;
int temp1;
int temp2;
int temp3;
int lc;
int state;
int isPreviousMatch;
int len;
UInt32 rep0;
UInt32 rep1;
UInt32 rep2;
UInt32 rep3;
UInt32 posStateMask;
UInt32 literalPosMask;
UInt32 dictionaryPos;
/* range coder */
UInt32 range;
UInt32 code;
/* allocated buffers */
lzByte *dictionary;
lzByte *dynamicData;
} lzma_stream;
void LZMACALL lzmaInit(lzma_stream *);
int LZMACALL lzmaDecode(lzma_stream *);
void LZMACALL lzmaShutdown(lzma_stream *); /* aCaB */
#ifdef __cplusplus
}
#endif
#endif