111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao/** @file 211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao Types.h 311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao Based on LZMA SDK 4.65: 511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao Types.h -- Basic types 611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 2008-11-23 : Igor Pavlov : Public domain 711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> 911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao This program and the accompanying materials 1011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao are licensed and made available under the terms and conditions of the BSD License 1111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao which accompanies this distribution. The full text of the license may be found at 1211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao http://opensource.org/licenses/bsd-license.php 1311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 1411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 1511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 1611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 1711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao**/ 1811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 1911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifndef __7Z_TYPES_H 2011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define __7Z_TYPES_H 2111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 2211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifdef EFIAPI 2311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 2411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#include "UefiLzma.h" 2511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 2611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 2711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 2811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#include <stddef.h> 2911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 3011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifdef _WIN32 3111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#include <windows.h> 3211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 3311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 3411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 3511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 3611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_OK 0 3711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 3811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_DATA 1 3911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_MEM 2 4011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_CRC 3 4111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_UNSUPPORTED 4 4211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_PARAM 5 4311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_INPUT_EOF 6 4411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_OUTPUT_EOF 7 4511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_READ 8 4611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_WRITE 9 4711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_PROGRESS 10 4811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_FAIL 11 4911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_THREAD 12 5011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 5111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_ARCHIVE 16 5211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define SZ_ERROR_NO_ARCHIVE 17 5311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 5411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef int SRes; 5511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 5611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifdef _WIN32 5711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef DWORD WRes; 5811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 5911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef int WRes; 6011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 6111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 6211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifndef RINOK 6311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } 6411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 6511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 6611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef unsigned char Byte; 6711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef short Int16; 6811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef unsigned short UInt16; 6911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 7011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifdef _LZMA_UINT32_IS_ULONG 7111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef long Int32; 7211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef unsigned long UInt32; 7311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 7411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef int Int32; 7511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef unsigned int UInt32; 7611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 7711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 7811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifdef _SZ_NO_INT_64 7911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 8011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. 8111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao NOTES: Some code will work incorrectly in that case! */ 8211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 8311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef long Int64; 8411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef unsigned long UInt64; 8511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 8611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 8711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 8811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#if defined(_MSC_VER) || defined(__BORLANDC__) 8911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef __int64 Int64; 9011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef unsigned __int64 UInt64; 9111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 9211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef long long int Int64; 9311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef unsigned long long int UInt64; 9411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 9511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 9611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 9711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 9811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifdef _LZMA_NO_SYSTEM_SIZE_T 9911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef UInt32 SizeT; 10011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 10111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef size_t SizeT; 10211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 10311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 10411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef int Bool; 10511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define True 1 10611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define False 0 10711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 10811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 10911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#ifdef _MSC_VER 11011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 11111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#if _MSC_VER >= 1300 11211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_NO_INLINE __declspec(noinline) 11311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 11411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_NO_INLINE 11511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 11611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 11711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_CDECL __cdecl 11811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_STD_CALL __stdcall 11911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_FAST_CALL MY_NO_INLINE __fastcall 12011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 12111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#else 12211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 12311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_CDECL 12411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_STD_CALL 12511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define MY_FAST_CALL 12611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 12711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 12811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 12911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 13011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao/* The following interfaces use first parameter as pointer to structure */ 13111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 13211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 13311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 13411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Read)(void *p, void *buf, size_t *size); 13511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. 13611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao (output(*size) < input(*size)) is allowed */ 13711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} ISeqInStream; 13811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 13911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao/* it can return SZ_ERROR_INPUT_EOF */ 14011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming GaoSRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); 14111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming GaoSRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); 14211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming GaoSRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); 14311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 14411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 14511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 14611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao size_t (*Write)(void *p, const void *buf, size_t size); 14711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao /* Returns: result - the number of actually written bytes. 14811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao (result < size) means error */ 14911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} ISeqOutStream; 15011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 15111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef enum 15211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 15311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SZ_SEEK_SET = 0, 15411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SZ_SEEK_CUR = 1, 15511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SZ_SEEK_END = 2 15611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} ESzSeek; 15711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 15811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 15911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 16011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ 16111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); 16211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} ISeekInStream; 16311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 16411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 16511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 16611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Look)(void *p, void **buf, size_t *size); 16711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. 16811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao (output(*size) > input(*size)) is not allowed 16911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao (output(*size) < input(*size)) is allowed */ 17011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Skip)(void *p, size_t offset); 17111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao /* offset must be <= output(*size) of Look */ 17211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 17311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Read)(void *p, void *buf, size_t *size); 17411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao /* reads directly (without buffer). It's same as ISeqInStream::Read */ 17511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); 17611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} ILookInStream; 17711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 17811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming GaoSRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); 17911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming GaoSRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); 18011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 18111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao/* reads via ILookInStream::Read */ 18211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming GaoSRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); 18311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming GaoSRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); 18411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 18511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define LookToRead_BUF_SIZE (1 << 14) 18611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 18711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 18811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 18911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao ILookInStream s; 19011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao ISeekInStream *realStream; 19111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao size_t pos; 19211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao size_t size; 19311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao Byte buf[LookToRead_BUF_SIZE]; 19411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} CLookToRead; 19511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 19611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaovoid LookToRead_CreateVTable(CLookToRead *p, int lookahead); 19711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaovoid LookToRead_Init(CLookToRead *p); 19811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 19911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 20011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 20111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao ISeqInStream s; 20211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao ILookInStream *realStream; 20311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} CSecToLook; 20411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 20511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaovoid SecToLook_CreateVTable(CSecToLook *p); 20611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 20711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 20811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 20911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao ISeqInStream s; 21011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao ILookInStream *realStream; 21111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} CSecToRead; 21211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 21311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaovoid SecToRead_CreateVTable(CSecToRead *p); 21411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 21511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 21611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 21711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); 21811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao /* Returns: result. (result != SZ_OK) means break. 21911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao Value (UInt64)(Int64)-1 for size means unknown value. */ 22011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} ICompressProgress; 22111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 22211ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gaotypedef struct 22311ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao{ 22411ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao void *(*Alloc)(void *p, size_t size); 22511ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao void (*Free)(void *p, void *address); /* address can be 0 */ 22611ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao} ISzAlloc; 22711ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 22811ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define IAlloc_Alloc(p, size) (p)->Alloc((p), size) 22911ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#define IAlloc_Free(p, a) (p)->Free((p), a) 23011ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao 23111ff2c714b3b2e79f574ed18b75edabd77f9a336Liming Gao#endif 232