]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/Sdk/C/7zTypes.h
MdeModulePkg Lzma: Update LZMA SDK version to 18.05
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / LzmaCustomDecompressLib / Sdk / C / 7zTypes.h
CommitLineData
00f5e119
LG
1/* 7zTypes.h -- Basic types\r
22013-11-12 : Igor Pavlov : Public domain */\r
306bf4e2 3\r
4#ifndef __7Z_TYPES_H\r
5#define __7Z_TYPES_H\r
6\r
00f5e119
LG
7#ifdef _WIN32\r
8/* #include <windows.h> */\r
9#endif\r
306bf4e2 10\r
00f5e119 11#ifdef EFIAPI\r
306bf4e2 12#include "UefiLzma.h"\r
306bf4e2 13#else\r
306bf4e2 14#include <stddef.h>\r
306bf4e2 15#endif\r
16\r
00f5e119
LG
17#ifndef EXTERN_C_BEGIN\r
18#ifdef __cplusplus\r
19#define EXTERN_C_BEGIN extern "C" {\r
20#define EXTERN_C_END }\r
21#else\r
22#define EXTERN_C_BEGIN\r
23#define EXTERN_C_END\r
306bf4e2 24#endif\r
00f5e119
LG
25#endif\r
26\r
27EXTERN_C_BEGIN\r
306bf4e2 28\r
29#define SZ_OK 0\r
30\r
31#define SZ_ERROR_DATA 1\r
32#define SZ_ERROR_MEM 2\r
33#define SZ_ERROR_CRC 3\r
34#define SZ_ERROR_UNSUPPORTED 4\r
35#define SZ_ERROR_PARAM 5\r
36#define SZ_ERROR_INPUT_EOF 6\r
37#define SZ_ERROR_OUTPUT_EOF 7\r
38#define SZ_ERROR_READ 8\r
39#define SZ_ERROR_WRITE 9\r
40#define SZ_ERROR_PROGRESS 10\r
41#define SZ_ERROR_FAIL 11\r
42#define SZ_ERROR_THREAD 12\r
43\r
44#define SZ_ERROR_ARCHIVE 16\r
45#define SZ_ERROR_NO_ARCHIVE 17\r
46\r
47typedef int SRes;\r
48\r
49#ifdef _WIN32\r
00f5e119
LG
50/* typedef DWORD WRes; */\r
51typedef unsigned WRes;\r
306bf4e2 52#else\r
53typedef int WRes;\r
54#endif\r
55\r
56#ifndef RINOK\r
57#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }\r
58#endif\r
59\r
60typedef unsigned char Byte;\r
61typedef short Int16;\r
62typedef unsigned short UInt16;\r
63\r
64#ifdef _LZMA_UINT32_IS_ULONG\r
65typedef long Int32;\r
66typedef unsigned long UInt32;\r
67#else\r
68typedef int Int32;\r
69typedef unsigned int UInt32;\r
70#endif\r
71\r
72#ifdef _SZ_NO_INT_64\r
73\r
74/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.\r
75 NOTES: Some code will work incorrectly in that case! */\r
76\r
77typedef long Int64;\r
78typedef unsigned long UInt64;\r
79\r
80#else\r
81\r
82#if defined(_MSC_VER) || defined(__BORLANDC__)\r
83typedef __int64 Int64;\r
84typedef unsigned __int64 UInt64;\r
00f5e119 85#define UINT64_CONST(n) n\r
306bf4e2 86#else\r
87typedef long long int Int64;\r
88typedef unsigned long long int UInt64;\r
00f5e119 89#define UINT64_CONST(n) n ## ULL\r
306bf4e2 90#endif\r
91\r
92#endif\r
93\r
94#ifdef _LZMA_NO_SYSTEM_SIZE_T\r
95typedef UInt32 SizeT;\r
96#else\r
97typedef size_t SizeT;\r
98#endif\r
99\r
100typedef int Bool;\r
101#define True 1\r
102#define False 0\r
103\r
104\r
00f5e119
LG
105#ifdef _WIN32\r
106#define MY_STD_CALL __stdcall\r
107#else\r
108#define MY_STD_CALL\r
109#endif\r
110\r
306bf4e2 111#ifdef _MSC_VER\r
112\r
113#if _MSC_VER >= 1300\r
114#define MY_NO_INLINE __declspec(noinline)\r
115#else\r
116#define MY_NO_INLINE\r
117#endif\r
118\r
119#define MY_CDECL __cdecl\r
00f5e119 120#define MY_FAST_CALL __fastcall\r
306bf4e2 121\r
122#else\r
123\r
00f5e119 124#define MY_NO_INLINE\r
306bf4e2 125#define MY_CDECL\r
306bf4e2 126#define MY_FAST_CALL\r
127\r
128#endif\r
129\r
130\r
131/* The following interfaces use first parameter as pointer to structure */\r
132\r
00f5e119
LG
133typedef struct\r
134{\r
135 Byte (*Read)(void *p); /* reads one byte, returns 0 in case of EOF or error */\r
136} IByteIn;\r
137\r
138typedef struct\r
139{\r
140 void (*Write)(void *p, Byte b);\r
141} IByteOut;\r
142\r
306bf4e2 143typedef struct\r
144{\r
145 SRes (*Read)(void *p, void *buf, size_t *size);\r
146 /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.\r
147 (output(*size) < input(*size)) is allowed */\r
148} ISeqInStream;\r
149\r
150/* it can return SZ_ERROR_INPUT_EOF */\r
151SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);\r
152SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);\r
153SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);\r
154\r
155typedef struct\r
156{\r
157 size_t (*Write)(void *p, const void *buf, size_t size);\r
158 /* Returns: result - the number of actually written bytes.\r
159 (result < size) means error */\r
160} ISeqOutStream;\r
161\r
162typedef enum\r
163{\r
164 SZ_SEEK_SET = 0,\r
165 SZ_SEEK_CUR = 1,\r
166 SZ_SEEK_END = 2\r
167} ESzSeek;\r
168\r
169typedef struct\r
170{\r
171 SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */\r
172 SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);\r
173} ISeekInStream;\r
174\r
175typedef struct\r
176{\r
00f5e119 177 SRes (*Look)(void *p, const void **buf, size_t *size);\r
306bf4e2 178 /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.\r
179 (output(*size) > input(*size)) is not allowed\r
180 (output(*size) < input(*size)) is allowed */\r
181 SRes (*Skip)(void *p, size_t offset);\r
182 /* offset must be <= output(*size) of Look */\r
183\r
184 SRes (*Read)(void *p, void *buf, size_t *size);\r
185 /* reads directly (without buffer). It's same as ISeqInStream::Read */\r
186 SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);\r
187} ILookInStream;\r
188\r
189SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);\r
190SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);\r
191\r
192/* reads via ILookInStream::Read */\r
193SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);\r
194SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);\r
195\r
196#define LookToRead_BUF_SIZE (1 << 14)\r
197\r
198typedef struct\r
199{\r
200 ILookInStream s;\r
201 ISeekInStream *realStream;\r
202 size_t pos;\r
203 size_t size;\r
204 Byte buf[LookToRead_BUF_SIZE];\r
205} CLookToRead;\r
206\r
207void LookToRead_CreateVTable(CLookToRead *p, int lookahead);\r
208void LookToRead_Init(CLookToRead *p);\r
209\r
210typedef struct\r
211{\r
212 ISeqInStream s;\r
213 ILookInStream *realStream;\r
214} CSecToLook;\r
215\r
216void SecToLook_CreateVTable(CSecToLook *p);\r
217\r
218typedef struct\r
219{\r
220 ISeqInStream s;\r
221 ILookInStream *realStream;\r
222} CSecToRead;\r
223\r
224void SecToRead_CreateVTable(CSecToRead *p);\r
225\r
226typedef struct\r
227{\r
228 SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);\r
229 /* Returns: result. (result != SZ_OK) means break.\r
230 Value (UInt64)(Int64)-1 for size means unknown value. */\r
231} ICompressProgress;\r
232\r
233typedef struct\r
234{\r
235 void *(*Alloc)(void *p, size_t size);\r
236 void (*Free)(void *p, void *address); /* address can be 0 */\r
237} ISzAlloc;\r
238\r
239#define IAlloc_Alloc(p, size) (p)->Alloc((p), size)\r
240#define IAlloc_Free(p, a) (p)->Free((p), a)\r
241\r
00f5e119
LG
242#ifdef _WIN32\r
243\r
244#define CHAR_PATH_SEPARATOR '\\'\r
245#define WCHAR_PATH_SEPARATOR L'\\'\r
246#define STRING_PATH_SEPARATOR "\\"\r
247#define WSTRING_PATH_SEPARATOR L"\\"\r
248\r
249#else\r
250\r
251#define CHAR_PATH_SEPARATOR '/'\r
252#define WCHAR_PATH_SEPARATOR L'/'\r
253#define STRING_PATH_SEPARATOR "/"\r
254#define WSTRING_PATH_SEPARATOR L"/"\r
255\r
256#endif\r
257\r
258EXTERN_C_END\r
259\r
306bf4e2 260#endif\r