]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/Sdk/C/Types.h
Add LzmaCustomDecompressLib based on the LZMA SDK 4.65 which was
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / LzmaCustomDecompressLib / Sdk / C / Types.h
CommitLineData
306bf4e2 1/** @file\r
2 Types.h\r
3\r
4 Based on LZMA SDK 4.65:\r
5 Types.h -- Basic types\r
6 2008-11-23 : Igor Pavlov : Public domain\r
7\r
8 Copyright (c) 2009, Intel Corporation<BR>\r
9 All rights reserved. This program and the accompanying materials\r
10 are licensed and made available under the terms and conditions of the BSD License\r
11 which accompanies this distribution. The full text of the license may be found at\r
12 http://opensource.org/licenses/bsd-license.php\r
13\r
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
16\r
17**/\r
18\r
19#ifndef __7Z_TYPES_H\r
20#define __7Z_TYPES_H\r
21\r
22#ifdef EFIAPI\r
23\r
24#include "UefiLzma.h"\r
25\r
26#else\r
27\r
28#include <stddef.h>\r
29\r
30#ifdef _WIN32\r
31#include <windows.h>\r
32#endif\r
33\r
34#endif\r
35\r
36#define SZ_OK 0\r
37\r
38#define SZ_ERROR_DATA 1\r
39#define SZ_ERROR_MEM 2\r
40#define SZ_ERROR_CRC 3\r
41#define SZ_ERROR_UNSUPPORTED 4\r
42#define SZ_ERROR_PARAM 5\r
43#define SZ_ERROR_INPUT_EOF 6\r
44#define SZ_ERROR_OUTPUT_EOF 7\r
45#define SZ_ERROR_READ 8\r
46#define SZ_ERROR_WRITE 9\r
47#define SZ_ERROR_PROGRESS 10\r
48#define SZ_ERROR_FAIL 11\r
49#define SZ_ERROR_THREAD 12\r
50\r
51#define SZ_ERROR_ARCHIVE 16\r
52#define SZ_ERROR_NO_ARCHIVE 17\r
53\r
54typedef int SRes;\r
55\r
56#ifdef _WIN32\r
57typedef DWORD WRes;\r
58#else\r
59typedef int WRes;\r
60#endif\r
61\r
62#ifndef RINOK\r
63#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }\r
64#endif\r
65\r
66typedef unsigned char Byte;\r
67typedef short Int16;\r
68typedef unsigned short UInt16;\r
69\r
70#ifdef _LZMA_UINT32_IS_ULONG\r
71typedef long Int32;\r
72typedef unsigned long UInt32;\r
73#else\r
74typedef int Int32;\r
75typedef unsigned int UInt32;\r
76#endif\r
77\r
78#ifdef _SZ_NO_INT_64\r
79\r
80/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.\r
81 NOTES: Some code will work incorrectly in that case! */\r
82\r
83typedef long Int64;\r
84typedef unsigned long UInt64;\r
85\r
86#else\r
87\r
88#if defined(_MSC_VER) || defined(__BORLANDC__)\r
89typedef __int64 Int64;\r
90typedef unsigned __int64 UInt64;\r
91#else\r
92typedef long long int Int64;\r
93typedef unsigned long long int UInt64;\r
94#endif\r
95\r
96#endif\r
97\r
98#ifdef _LZMA_NO_SYSTEM_SIZE_T\r
99typedef UInt32 SizeT;\r
100#else\r
101typedef size_t SizeT;\r
102#endif\r
103\r
104typedef int Bool;\r
105#define True 1\r
106#define False 0\r
107\r
108\r
109#ifdef _MSC_VER\r
110\r
111#if _MSC_VER >= 1300\r
112#define MY_NO_INLINE __declspec(noinline)\r
113#else\r
114#define MY_NO_INLINE\r
115#endif\r
116\r
117#define MY_CDECL __cdecl\r
118#define MY_STD_CALL __stdcall\r
119#define MY_FAST_CALL MY_NO_INLINE __fastcall\r
120\r
121#else\r
122\r
123#define MY_CDECL\r
124#define MY_STD_CALL\r
125#define MY_FAST_CALL\r
126\r
127#endif\r
128\r
129\r
130/* The following interfaces use first parameter as pointer to structure */\r
131\r
132typedef struct\r
133{\r
134 SRes (*Read)(void *p, void *buf, size_t *size);\r
135 /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.\r
136 (output(*size) < input(*size)) is allowed */\r
137} ISeqInStream;\r
138\r
139/* it can return SZ_ERROR_INPUT_EOF */\r
140SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);\r
141SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);\r
142SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);\r
143\r
144typedef struct\r
145{\r
146 size_t (*Write)(void *p, const void *buf, size_t size);\r
147 /* Returns: result - the number of actually written bytes.\r
148 (result < size) means error */\r
149} ISeqOutStream;\r
150\r
151typedef enum\r
152{\r
153 SZ_SEEK_SET = 0,\r
154 SZ_SEEK_CUR = 1,\r
155 SZ_SEEK_END = 2\r
156} ESzSeek;\r
157\r
158typedef struct\r
159{\r
160 SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */\r
161 SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);\r
162} ISeekInStream;\r
163\r
164typedef struct\r
165{\r
166 SRes (*Look)(void *p, void **buf, size_t *size);\r
167 /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.\r
168 (output(*size) > input(*size)) is not allowed\r
169 (output(*size) < input(*size)) is allowed */\r
170 SRes (*Skip)(void *p, size_t offset);\r
171 /* offset must be <= output(*size) of Look */\r
172\r
173 SRes (*Read)(void *p, void *buf, size_t *size);\r
174 /* reads directly (without buffer). It's same as ISeqInStream::Read */\r
175 SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);\r
176} ILookInStream;\r
177\r
178SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);\r
179SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);\r
180\r
181/* reads via ILookInStream::Read */\r
182SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);\r
183SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);\r
184\r
185#define LookToRead_BUF_SIZE (1 << 14)\r
186\r
187typedef struct\r
188{\r
189 ILookInStream s;\r
190 ISeekInStream *realStream;\r
191 size_t pos;\r
192 size_t size;\r
193 Byte buf[LookToRead_BUF_SIZE];\r
194} CLookToRead;\r
195\r
196void LookToRead_CreateVTable(CLookToRead *p, int lookahead);\r
197void LookToRead_Init(CLookToRead *p);\r
198\r
199typedef struct\r
200{\r
201 ISeqInStream s;\r
202 ILookInStream *realStream;\r
203} CSecToLook;\r
204\r
205void SecToLook_CreateVTable(CSecToLook *p);\r
206\r
207typedef struct\r
208{\r
209 ISeqInStream s;\r
210 ILookInStream *realStream;\r
211} CSecToRead;\r
212\r
213void SecToRead_CreateVTable(CSecToRead *p);\r
214\r
215typedef struct\r
216{\r
217 SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);\r
218 /* Returns: result. (result != SZ_OK) means break.\r
219 Value (UInt64)(Int64)-1 for size means unknown value. */\r
220} ICompressProgress;\r
221\r
222typedef struct\r
223{\r
224 void *(*Alloc)(void *p, size_t size);\r
225 void (*Free)(void *p, void *address); /* address can be 0 */\r
226} ISzAlloc;\r
227\r
228#define IAlloc_Alloc(p, size) (p)->Alloc((p), size)\r
229#define IAlloc_Free(p, a) (p)->Free((p), a)\r
230\r
231#endif\r