1306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten/** @file
2306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  Types.h
3306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
4306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  Based on LZMA SDK 4.65:
5306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    Types.h -- Basic types
6306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    2008-11-23 : Igor Pavlov : Public domain
7306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
8180a5a35cb49699bd249dee19e41cee34c856a58hhtian  Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
9180a5a35cb49699bd249dee19e41cee34c856a58hhtian  This program and the accompanying materials
10306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  are licensed and made available under the terms and conditions of the BSD License
11306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  which accompanies this distribution.  The full text of the license may be found at
12306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  http://opensource.org/licenses/bsd-license.php
13306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
14306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
17306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten**/
18306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
19306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifndef __7Z_TYPES_H
20306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define __7Z_TYPES_H
21306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
22306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifdef EFIAPI
23306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
24306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#include "UefiLzma.h"
25306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
26306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
27306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
28306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#include <stddef.h>
29306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
30306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifdef _WIN32
31306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#include <windows.h>
32306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
33306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
34306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
35306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
36306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_OK 0
37306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
38306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_DATA 1
39306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_MEM 2
40306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_CRC 3
41306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_UNSUPPORTED 4
42306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_PARAM 5
43306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_INPUT_EOF 6
44306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_OUTPUT_EOF 7
45306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_READ 8
46306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_WRITE 9
47306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_PROGRESS 10
48306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_FAIL 11
49306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_THREAD 12
50306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
51306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_ARCHIVE 16
52306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define SZ_ERROR_NO_ARCHIVE 17
53306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
54306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef int SRes;
55306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
56306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifdef _WIN32
57306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef DWORD WRes;
58306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
59306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef int WRes;
60306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
61306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
62306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifndef RINOK
63306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
64306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
65306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
66306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef unsigned char Byte;
67306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef short Int16;
68306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef unsigned short UInt16;
69306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
70306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifdef _LZMA_UINT32_IS_ULONG
71306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef long Int32;
72306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef unsigned long UInt32;
73306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
74306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef int Int32;
75306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef unsigned int UInt32;
76306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
77306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
78306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifdef _SZ_NO_INT_64
79306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
80306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
81306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten   NOTES: Some code will work incorrectly in that case! */
82306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
83306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef long Int64;
84306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef unsigned long UInt64;
85306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
86306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
87306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
88306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#if defined(_MSC_VER) || defined(__BORLANDC__)
89306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef __int64 Int64;
90306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef unsigned __int64 UInt64;
91306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
92306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef long long int Int64;
93306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef unsigned long long int UInt64;
94306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
95306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
96306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
97306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
98306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifdef _LZMA_NO_SYSTEM_SIZE_T
99306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef UInt32 SizeT;
100306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
101306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef size_t SizeT;
102306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
103306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
104306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef int Bool;
105306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define True 1
106306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define False 0
107306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
108306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
109306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#ifdef _MSC_VER
110306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
111306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#if _MSC_VER >= 1300
112306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_NO_INLINE __declspec(noinline)
113306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
114306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_NO_INLINE
115306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
116306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
117306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_CDECL __cdecl
118306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_STD_CALL __stdcall
119306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_FAST_CALL MY_NO_INLINE __fastcall
120306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
121306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#else
122306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
123306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_CDECL
124306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_STD_CALL
125306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define MY_FAST_CALL
126306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
127306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
128306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
129306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
130306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten/* The following interfaces use first parameter as pointer to structure */
131306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
132306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
133306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
134306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Read)(void *p, void *buf, size_t *size);
135306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
136306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten       (output(*size) < input(*size)) is allowed */
137306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} ISeqInStream;
138306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
139306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten/* it can return SZ_ERROR_INPUT_EOF */
140306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenSRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);
141306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenSRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);
142306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenSRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);
143306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
144306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
145306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
146306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  size_t (*Write)(void *p, const void *buf, size_t size);
147306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    /* Returns: result - the number of actually written bytes.
148306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten       (result < size) means error */
149306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} ISeqOutStream;
150306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
151306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef enum
152306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
153306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SZ_SEEK_SET = 0,
154306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SZ_SEEK_CUR = 1,
155306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SZ_SEEK_END = 2
156306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} ESzSeek;
157306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
158306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
159306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
160306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Read)(void *p, void *buf, size_t *size);  /* same as ISeqInStream::Read */
161306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
162306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} ISeekInStream;
163306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
164306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
165306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
166306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Look)(void *p, void **buf, size_t *size);
167306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
168306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten       (output(*size) > input(*size)) is not allowed
169306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten       (output(*size) < input(*size)) is allowed */
170306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Skip)(void *p, size_t offset);
171306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    /* offset must be <= output(*size) of Look */
172306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
173306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Read)(void *p, void *buf, size_t *size);
174306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    /* reads directly (without buffer). It's same as ISeqInStream::Read */
175306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
176306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} ILookInStream;
177306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
178306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenSRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);
179306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenSRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);
180306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
181306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten/* reads via ILookInStream::Read */
182306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenSRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);
183306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenSRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);
184306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
185306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define LookToRead_BUF_SIZE (1 << 14)
186306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
187306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
188306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
189306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  ILookInStream s;
190306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  ISeekInStream *realStream;
191306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  size_t pos;
192306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  size_t size;
193306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  Byte buf[LookToRead_BUF_SIZE];
194306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} CLookToRead;
195306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
196306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenvoid LookToRead_CreateVTable(CLookToRead *p, int lookahead);
197306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenvoid LookToRead_Init(CLookToRead *p);
198306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
199306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
200306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
201306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  ISeqInStream s;
202306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  ILookInStream *realStream;
203306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} CSecToLook;
204306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
205306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenvoid SecToLook_CreateVTable(CSecToLook *p);
206306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
207306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
208306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
209306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  ISeqInStream s;
210306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  ILookInStream *realStream;
211306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} CSecToRead;
212306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
213306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustenvoid SecToRead_CreateVTable(CSecToRead *p);
214306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
215306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
216306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
217306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);
218306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten    /* Returns: result. (result != SZ_OK) means break.
219306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten       Value (UInt64)(Int64)-1 for size means unknown value. */
220306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} ICompressProgress;
221306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
222306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljustentypedef struct
223306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten{
224306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  void *(*Alloc)(void *p, size_t size);
225306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten  void (*Free)(void *p, void *address); /* address can be 0 */
226306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten} ISzAlloc;
227306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
228306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define IAlloc_Alloc(p, size) (p)->Alloc((p), size)
229306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#define IAlloc_Free(p, a) (p)->Free((p), a)
230306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten
231306bf4e22a1139b47357b9e3fd70cfc1c0f05f9cjljusten#endif
232