xref: /illumos-gate/usr/src/common/lzma/Types.h (revision b1efbcd6)
1*b1efbcd6SAlok Aggarwal /*
2*b1efbcd6SAlok Aggarwal  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
3*b1efbcd6SAlok Aggarwal  * Use is subject to license terms.
4*b1efbcd6SAlok Aggarwal  */
5*b1efbcd6SAlok Aggarwal 
6*b1efbcd6SAlok Aggarwal /* Types.h -- Basic types
7*b1efbcd6SAlok Aggarwal 2008-11-23 : Igor Pavlov : Public domain */
8*b1efbcd6SAlok Aggarwal 
9*b1efbcd6SAlok Aggarwal #ifndef __7Z_TYPES_H
10*b1efbcd6SAlok Aggarwal #define __7Z_TYPES_H
11*b1efbcd6SAlok Aggarwal 
12*b1efbcd6SAlok Aggarwal #ifndef _KERNEL
13*b1efbcd6SAlok Aggarwal #include <stddef.h>
14*b1efbcd6SAlok Aggarwal #endif /* _KERNEL */
15*b1efbcd6SAlok Aggarwal 
16*b1efbcd6SAlok Aggarwal #ifdef _WIN32
17*b1efbcd6SAlok Aggarwal #include <windows.h>
18*b1efbcd6SAlok Aggarwal #endif
19*b1efbcd6SAlok Aggarwal 
20*b1efbcd6SAlok Aggarwal #define SZ_OK 0
21*b1efbcd6SAlok Aggarwal 
22*b1efbcd6SAlok Aggarwal #define SZ_ERROR_DATA 1
23*b1efbcd6SAlok Aggarwal #define SZ_ERROR_MEM 2
24*b1efbcd6SAlok Aggarwal #define SZ_ERROR_CRC 3
25*b1efbcd6SAlok Aggarwal #define SZ_ERROR_UNSUPPORTED 4
26*b1efbcd6SAlok Aggarwal #define SZ_ERROR_PARAM 5
27*b1efbcd6SAlok Aggarwal #define SZ_ERROR_INPUT_EOF 6
28*b1efbcd6SAlok Aggarwal #define SZ_ERROR_OUTPUT_EOF 7
29*b1efbcd6SAlok Aggarwal #define SZ_ERROR_READ 8
30*b1efbcd6SAlok Aggarwal #define SZ_ERROR_WRITE 9
31*b1efbcd6SAlok Aggarwal #define SZ_ERROR_PROGRESS 10
32*b1efbcd6SAlok Aggarwal #define SZ_ERROR_FAIL 11
33*b1efbcd6SAlok Aggarwal #define SZ_ERROR_THREAD 12
34*b1efbcd6SAlok Aggarwal 
35*b1efbcd6SAlok Aggarwal #define SZ_ERROR_ARCHIVE 16
36*b1efbcd6SAlok Aggarwal #define SZ_ERROR_NO_ARCHIVE 17
37*b1efbcd6SAlok Aggarwal 
38*b1efbcd6SAlok Aggarwal typedef int SRes;
39*b1efbcd6SAlok Aggarwal 
40*b1efbcd6SAlok Aggarwal #ifdef _WIN32
41*b1efbcd6SAlok Aggarwal typedef DWORD WRes;
42*b1efbcd6SAlok Aggarwal #else
43*b1efbcd6SAlok Aggarwal typedef int WRes;
44*b1efbcd6SAlok Aggarwal #endif
45*b1efbcd6SAlok Aggarwal 
46*b1efbcd6SAlok Aggarwal #ifndef RINOK
47*b1efbcd6SAlok Aggarwal #define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
48*b1efbcd6SAlok Aggarwal #endif
49*b1efbcd6SAlok Aggarwal 
50*b1efbcd6SAlok Aggarwal typedef unsigned char Byte;
51*b1efbcd6SAlok Aggarwal typedef short Int16;
52*b1efbcd6SAlok Aggarwal typedef unsigned short UInt16;
53*b1efbcd6SAlok Aggarwal 
54*b1efbcd6SAlok Aggarwal #ifdef _LZMA_UINT32_IS_ULONG
55*b1efbcd6SAlok Aggarwal typedef long Int32;
56*b1efbcd6SAlok Aggarwal typedef unsigned long UInt32;
57*b1efbcd6SAlok Aggarwal #else
58*b1efbcd6SAlok Aggarwal typedef int Int32;
59*b1efbcd6SAlok Aggarwal typedef unsigned int UInt32;
60*b1efbcd6SAlok Aggarwal #endif
61*b1efbcd6SAlok Aggarwal 
62*b1efbcd6SAlok Aggarwal #ifdef _SZ_NO_INT_64
63*b1efbcd6SAlok Aggarwal 
64*b1efbcd6SAlok Aggarwal /* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
65*b1efbcd6SAlok Aggarwal    NOTES: Some code will work incorrectly in that case! */
66*b1efbcd6SAlok Aggarwal 
67*b1efbcd6SAlok Aggarwal typedef long Int64;
68*b1efbcd6SAlok Aggarwal typedef unsigned long UInt64;
69*b1efbcd6SAlok Aggarwal 
70*b1efbcd6SAlok Aggarwal #else
71*b1efbcd6SAlok Aggarwal 
72*b1efbcd6SAlok Aggarwal #if defined(_MSC_VER) || defined(__BORLANDC__)
73*b1efbcd6SAlok Aggarwal typedef __int64 Int64;
74*b1efbcd6SAlok Aggarwal typedef unsigned __int64 UInt64;
75*b1efbcd6SAlok Aggarwal #else
76*b1efbcd6SAlok Aggarwal typedef long long int Int64;
77*b1efbcd6SAlok Aggarwal typedef unsigned long long int UInt64;
78*b1efbcd6SAlok Aggarwal #endif
79*b1efbcd6SAlok Aggarwal 
80*b1efbcd6SAlok Aggarwal #endif
81*b1efbcd6SAlok Aggarwal 
82*b1efbcd6SAlok Aggarwal #ifdef _LZMA_NO_SYSTEM_SIZE_T
83*b1efbcd6SAlok Aggarwal typedef UInt32 SizeT;
84*b1efbcd6SAlok Aggarwal #else
85*b1efbcd6SAlok Aggarwal #include <sys/types.h>
86*b1efbcd6SAlok Aggarwal typedef size_t SizeT;
87*b1efbcd6SAlok Aggarwal #endif
88*b1efbcd6SAlok Aggarwal 
89*b1efbcd6SAlok Aggarwal typedef int Bool;
90*b1efbcd6SAlok Aggarwal #define True 1
91*b1efbcd6SAlok Aggarwal #define False 0
92*b1efbcd6SAlok Aggarwal 
93*b1efbcd6SAlok Aggarwal 
94*b1efbcd6SAlok Aggarwal #ifdef _MSC_VER
95*b1efbcd6SAlok Aggarwal 
96*b1efbcd6SAlok Aggarwal #if _MSC_VER >= 1300
97*b1efbcd6SAlok Aggarwal #define MY_NO_INLINE __declspec(noinline)
98*b1efbcd6SAlok Aggarwal #else
99*b1efbcd6SAlok Aggarwal #define MY_NO_INLINE
100*b1efbcd6SAlok Aggarwal #endif
101*b1efbcd6SAlok Aggarwal 
102*b1efbcd6SAlok Aggarwal #define MY_CDECL __cdecl
103*b1efbcd6SAlok Aggarwal #define MY_STD_CALL __stdcall
104*b1efbcd6SAlok Aggarwal #define MY_FAST_CALL MY_NO_INLINE __fastcall
105*b1efbcd6SAlok Aggarwal 
106*b1efbcd6SAlok Aggarwal #else
107*b1efbcd6SAlok Aggarwal 
108*b1efbcd6SAlok Aggarwal #define MY_CDECL
109*b1efbcd6SAlok Aggarwal #define MY_STD_CALL
110*b1efbcd6SAlok Aggarwal #define MY_FAST_CALL
111*b1efbcd6SAlok Aggarwal 
112*b1efbcd6SAlok Aggarwal #endif
113*b1efbcd6SAlok Aggarwal 
114*b1efbcd6SAlok Aggarwal 
115*b1efbcd6SAlok Aggarwal /* The following interfaces use first parameter as pointer to structure */
116*b1efbcd6SAlok Aggarwal 
117*b1efbcd6SAlok Aggarwal typedef struct
118*b1efbcd6SAlok Aggarwal {
119*b1efbcd6SAlok Aggarwal   SRes (*Read)(void *p, void *buf, size_t *size);
120*b1efbcd6SAlok Aggarwal     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
121*b1efbcd6SAlok Aggarwal        (output(*size) < input(*size)) is allowed */
122*b1efbcd6SAlok Aggarwal } ISeqInStream;
123*b1efbcd6SAlok Aggarwal 
124*b1efbcd6SAlok Aggarwal /* it can return SZ_ERROR_INPUT_EOF */
125*b1efbcd6SAlok Aggarwal SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);
126*b1efbcd6SAlok Aggarwal SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);
127*b1efbcd6SAlok Aggarwal SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);
128*b1efbcd6SAlok Aggarwal 
129*b1efbcd6SAlok Aggarwal typedef struct
130*b1efbcd6SAlok Aggarwal {
131*b1efbcd6SAlok Aggarwal   size_t (*Write)(void *p, const void *buf, size_t size);
132*b1efbcd6SAlok Aggarwal     /* Returns: result - the number of actually written bytes.
133*b1efbcd6SAlok Aggarwal        (result < size) means error */
134*b1efbcd6SAlok Aggarwal } ISeqOutStream;
135*b1efbcd6SAlok Aggarwal 
136*b1efbcd6SAlok Aggarwal typedef enum
137*b1efbcd6SAlok Aggarwal {
138*b1efbcd6SAlok Aggarwal   SZ_SEEK_SET = 0,
139*b1efbcd6SAlok Aggarwal   SZ_SEEK_CUR = 1,
140*b1efbcd6SAlok Aggarwal   SZ_SEEK_END = 2
141*b1efbcd6SAlok Aggarwal } ESzSeek;
142*b1efbcd6SAlok Aggarwal 
143*b1efbcd6SAlok Aggarwal typedef struct
144*b1efbcd6SAlok Aggarwal {
145*b1efbcd6SAlok Aggarwal   SRes (*Read)(void *p, void *buf, size_t *size);  /* same as ISeqInStream::Read */
146*b1efbcd6SAlok Aggarwal   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
147*b1efbcd6SAlok Aggarwal } ISeekInStream;
148*b1efbcd6SAlok Aggarwal 
149*b1efbcd6SAlok Aggarwal typedef struct
150*b1efbcd6SAlok Aggarwal {
151*b1efbcd6SAlok Aggarwal   SRes (*Look)(void *p, void **buf, size_t *size);
152*b1efbcd6SAlok Aggarwal     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
153*b1efbcd6SAlok Aggarwal        (output(*size) > input(*size)) is not allowed
154*b1efbcd6SAlok Aggarwal        (output(*size) < input(*size)) is allowed */
155*b1efbcd6SAlok Aggarwal   SRes (*Skip)(void *p, size_t offset);
156*b1efbcd6SAlok Aggarwal     /* offset must be <= output(*size) of Look */
157*b1efbcd6SAlok Aggarwal 
158*b1efbcd6SAlok Aggarwal   SRes (*Read)(void *p, void *buf, size_t *size);
159*b1efbcd6SAlok Aggarwal     /* reads directly (without buffer). It's same as ISeqInStream::Read */
160*b1efbcd6SAlok Aggarwal   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
161*b1efbcd6SAlok Aggarwal } ILookInStream;
162*b1efbcd6SAlok Aggarwal 
163*b1efbcd6SAlok Aggarwal SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);
164*b1efbcd6SAlok Aggarwal SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);
165*b1efbcd6SAlok Aggarwal 
166*b1efbcd6SAlok Aggarwal /* reads via ILookInStream::Read */
167*b1efbcd6SAlok Aggarwal SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);
168*b1efbcd6SAlok Aggarwal SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);
169*b1efbcd6SAlok Aggarwal 
170*b1efbcd6SAlok Aggarwal #define LookToRead_BUF_SIZE (1 << 14)
171*b1efbcd6SAlok Aggarwal 
172*b1efbcd6SAlok Aggarwal typedef struct
173*b1efbcd6SAlok Aggarwal {
174*b1efbcd6SAlok Aggarwal   ILookInStream s;
175*b1efbcd6SAlok Aggarwal   ISeekInStream *realStream;
176*b1efbcd6SAlok Aggarwal   size_t pos;
177*b1efbcd6SAlok Aggarwal   size_t size;
178*b1efbcd6SAlok Aggarwal   Byte buf[LookToRead_BUF_SIZE];
179*b1efbcd6SAlok Aggarwal } CLookToRead;
180*b1efbcd6SAlok Aggarwal 
181*b1efbcd6SAlok Aggarwal void LookToRead_CreateVTable(CLookToRead *p, int lookahead);
182*b1efbcd6SAlok Aggarwal void LookToRead_Init(CLookToRead *p);
183*b1efbcd6SAlok Aggarwal 
184*b1efbcd6SAlok Aggarwal typedef struct
185*b1efbcd6SAlok Aggarwal {
186*b1efbcd6SAlok Aggarwal   ISeqInStream s;
187*b1efbcd6SAlok Aggarwal   ILookInStream *realStream;
188*b1efbcd6SAlok Aggarwal } CSecToLook;
189*b1efbcd6SAlok Aggarwal 
190*b1efbcd6SAlok Aggarwal void SecToLook_CreateVTable(CSecToLook *p);
191*b1efbcd6SAlok Aggarwal 
192*b1efbcd6SAlok Aggarwal typedef struct
193*b1efbcd6SAlok Aggarwal {
194*b1efbcd6SAlok Aggarwal   ISeqInStream s;
195*b1efbcd6SAlok Aggarwal   ILookInStream *realStream;
196*b1efbcd6SAlok Aggarwal } CSecToRead;
197*b1efbcd6SAlok Aggarwal 
198*b1efbcd6SAlok Aggarwal void SecToRead_CreateVTable(CSecToRead *p);
199*b1efbcd6SAlok Aggarwal 
200*b1efbcd6SAlok Aggarwal typedef struct
201*b1efbcd6SAlok Aggarwal {
202*b1efbcd6SAlok Aggarwal   SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);
203*b1efbcd6SAlok Aggarwal     /* Returns: result. (result != SZ_OK) means break.
204*b1efbcd6SAlok Aggarwal        Value (UInt64)(Int64)-1 for size means unknown value. */
205*b1efbcd6SAlok Aggarwal } ICompressProgress;
206*b1efbcd6SAlok Aggarwal 
207*b1efbcd6SAlok Aggarwal typedef struct
208*b1efbcd6SAlok Aggarwal {
209*b1efbcd6SAlok Aggarwal   void *(*Alloc)(void *p, size_t size);
210*b1efbcd6SAlok Aggarwal   void (*Free)(void *p, void *address, size_t size); /* address can be 0 */
211*b1efbcd6SAlok Aggarwal } ISzAlloc;
212*b1efbcd6SAlok Aggarwal 
213*b1efbcd6SAlok Aggarwal #define IAlloc_Alloc(p, size) (p)->Alloc((p), size)
214*b1efbcd6SAlok Aggarwal #define IAlloc_Free(p, a) (p)->Free((p), a)
215*b1efbcd6SAlok Aggarwal 
216*b1efbcd6SAlok Aggarwal #endif
217