xref: /rk3399_rockchip-uboot/lib/lzma/Types.h (revision 96764df1b47ddebfb50fadf5af72530b07b5fc89)
178acc472SPeter Tyser /* Types.h -- Basic types
2*5fe8380dSStefan Reinauer 2010-10-09 : Igor Pavlov : Public domain */
378acc472SPeter Tyser 
478acc472SPeter Tyser #ifndef __7Z_TYPES_H
578acc472SPeter Tyser #define __7Z_TYPES_H
678acc472SPeter Tyser 
778acc472SPeter Tyser #include <stddef.h>
878acc472SPeter Tyser 
978acc472SPeter Tyser #ifdef _WIN32
1078acc472SPeter Tyser #include <windows.h>
1178acc472SPeter Tyser #endif
1278acc472SPeter Tyser 
1378acc472SPeter Tyser #define SZ_OK 0
1478acc472SPeter Tyser 
1578acc472SPeter Tyser #define SZ_ERROR_DATA 1
1678acc472SPeter Tyser #define SZ_ERROR_MEM 2
1778acc472SPeter Tyser #define SZ_ERROR_CRC 3
1878acc472SPeter Tyser #define SZ_ERROR_UNSUPPORTED 4
1978acc472SPeter Tyser #define SZ_ERROR_PARAM 5
2078acc472SPeter Tyser #define SZ_ERROR_INPUT_EOF 6
2178acc472SPeter Tyser #define SZ_ERROR_OUTPUT_EOF 7
2278acc472SPeter Tyser #define SZ_ERROR_READ 8
2378acc472SPeter Tyser #define SZ_ERROR_WRITE 9
2478acc472SPeter Tyser #define SZ_ERROR_PROGRESS 10
2578acc472SPeter Tyser #define SZ_ERROR_FAIL 11
2678acc472SPeter Tyser #define SZ_ERROR_THREAD 12
2778acc472SPeter Tyser 
2878acc472SPeter Tyser #define SZ_ERROR_ARCHIVE 16
2978acc472SPeter Tyser #define SZ_ERROR_NO_ARCHIVE 17
3078acc472SPeter Tyser 
3178acc472SPeter Tyser typedef int SRes;
3278acc472SPeter Tyser 
3378acc472SPeter Tyser #ifdef _WIN32
3478acc472SPeter Tyser typedef DWORD WRes;
3578acc472SPeter Tyser #else
3678acc472SPeter Tyser typedef int WRes;
3778acc472SPeter Tyser #endif
3878acc472SPeter Tyser 
3978acc472SPeter Tyser #ifndef RINOK
4078acc472SPeter Tyser #define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
4178acc472SPeter Tyser #endif
4278acc472SPeter Tyser 
4378acc472SPeter Tyser typedef unsigned char Byte;
4478acc472SPeter Tyser typedef short Int16;
4578acc472SPeter Tyser typedef unsigned short UInt16;
4678acc472SPeter Tyser 
4778acc472SPeter Tyser #ifdef _LZMA_UINT32_IS_ULONG
4878acc472SPeter Tyser typedef long Int32;
4978acc472SPeter Tyser typedef unsigned long UInt32;
5078acc472SPeter Tyser #else
5178acc472SPeter Tyser typedef int Int32;
5278acc472SPeter Tyser typedef unsigned int UInt32;
5378acc472SPeter Tyser #endif
5478acc472SPeter Tyser 
5578acc472SPeter Tyser #ifdef _SZ_NO_INT_64
5678acc472SPeter Tyser 
5778acc472SPeter Tyser /* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
5878acc472SPeter Tyser    NOTES: Some code will work incorrectly in that case! */
5978acc472SPeter Tyser 
6078acc472SPeter Tyser typedef long Int64;
6178acc472SPeter Tyser typedef unsigned long UInt64;
6278acc472SPeter Tyser 
6378acc472SPeter Tyser #else
6478acc472SPeter Tyser 
6578acc472SPeter Tyser #if defined(_MSC_VER) || defined(__BORLANDC__)
6678acc472SPeter Tyser typedef __int64 Int64;
6778acc472SPeter Tyser typedef unsigned __int64 UInt64;
68*5fe8380dSStefan Reinauer #define UINT64_CONST(n) n
6978acc472SPeter Tyser #else
7078acc472SPeter Tyser typedef long long int Int64;
7178acc472SPeter Tyser typedef unsigned long long int UInt64;
72*5fe8380dSStefan Reinauer #define UINT64_CONST(n) n ## ULL
7378acc472SPeter Tyser #endif
7478acc472SPeter Tyser 
7578acc472SPeter Tyser #endif
7678acc472SPeter Tyser 
7778acc472SPeter Tyser #ifdef _LZMA_NO_SYSTEM_SIZE_T
7878acc472SPeter Tyser typedef UInt32 SizeT;
7978acc472SPeter Tyser #else
8078acc472SPeter Tyser typedef size_t SizeT;
8178acc472SPeter Tyser #endif
8278acc472SPeter Tyser 
8378acc472SPeter Tyser typedef int Bool;
8478acc472SPeter Tyser #define True 1
8578acc472SPeter Tyser #define False 0
8678acc472SPeter Tyser 
8778acc472SPeter Tyser 
8878acc472SPeter Tyser #ifdef _MSC_VER
8978acc472SPeter Tyser 
9078acc472SPeter Tyser #if _MSC_VER >= 1300
9178acc472SPeter Tyser #define MY_NO_INLINE __declspec(noinline)
9278acc472SPeter Tyser #else
9378acc472SPeter Tyser #define MY_NO_INLINE
9478acc472SPeter Tyser #endif
9578acc472SPeter Tyser 
9678acc472SPeter Tyser #define MY_CDECL __cdecl
97*5fe8380dSStefan Reinauer #define MY_FAST_CALL __fastcall
9878acc472SPeter Tyser 
9978acc472SPeter Tyser #else
10078acc472SPeter Tyser 
10178acc472SPeter Tyser #define MY_CDECL
10278acc472SPeter Tyser #define MY_FAST_CALL
10378acc472SPeter Tyser 
10478acc472SPeter Tyser #endif
10578acc472SPeter Tyser 
10678acc472SPeter Tyser 
10778acc472SPeter Tyser /* The following interfaces use first parameter as pointer to structure */
10878acc472SPeter Tyser 
10978acc472SPeter Tyser typedef struct
11078acc472SPeter Tyser {
111*5fe8380dSStefan Reinauer   Byte (*Read)(void *p); /* reads one byte, returns 0 in case of EOF or error */
112*5fe8380dSStefan Reinauer } IByteIn;
113*5fe8380dSStefan Reinauer 
114*5fe8380dSStefan Reinauer typedef struct
115*5fe8380dSStefan Reinauer {
116*5fe8380dSStefan Reinauer   void (*Write)(void *p, Byte b);
117*5fe8380dSStefan Reinauer } IByteOut;
118*5fe8380dSStefan Reinauer 
119*5fe8380dSStefan Reinauer typedef struct
120*5fe8380dSStefan Reinauer {
12178acc472SPeter Tyser   SRes (*Read)(void *p, void *buf, size_t *size);
12278acc472SPeter Tyser     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
12378acc472SPeter Tyser        (output(*size) < input(*size)) is allowed */
12478acc472SPeter Tyser } ISeqInStream;
12578acc472SPeter Tyser 
12678acc472SPeter Tyser /* it can return SZ_ERROR_INPUT_EOF */
12778acc472SPeter Tyser SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);
12878acc472SPeter Tyser SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);
12978acc472SPeter Tyser SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);
13078acc472SPeter Tyser 
13178acc472SPeter Tyser typedef struct
13278acc472SPeter Tyser {
13378acc472SPeter Tyser   size_t (*Write)(void *p, const void *buf, size_t size);
13478acc472SPeter Tyser     /* Returns: result - the number of actually written bytes.
13578acc472SPeter Tyser        (result < size) means error */
13678acc472SPeter Tyser } ISeqOutStream;
13778acc472SPeter Tyser 
13878acc472SPeter Tyser typedef enum
13978acc472SPeter Tyser {
14078acc472SPeter Tyser   SZ_SEEK_SET = 0,
14178acc472SPeter Tyser   SZ_SEEK_CUR = 1,
14278acc472SPeter Tyser   SZ_SEEK_END = 2
14378acc472SPeter Tyser } ESzSeek;
14478acc472SPeter Tyser 
14578acc472SPeter Tyser typedef struct
14678acc472SPeter Tyser {
14778acc472SPeter Tyser   SRes (*Read)(void *p, void *buf, size_t *size);  /* same as ISeqInStream::Read */
14878acc472SPeter Tyser   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
14978acc472SPeter Tyser } ISeekInStream;
15078acc472SPeter Tyser 
15178acc472SPeter Tyser typedef struct
15278acc472SPeter Tyser {
153*5fe8380dSStefan Reinauer   SRes (*Look)(void *p, const void **buf, size_t *size);
15478acc472SPeter Tyser     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
15578acc472SPeter Tyser        (output(*size) > input(*size)) is not allowed
15678acc472SPeter Tyser        (output(*size) < input(*size)) is allowed */
15778acc472SPeter Tyser   SRes (*Skip)(void *p, size_t offset);
15878acc472SPeter Tyser     /* offset must be <= output(*size) of Look */
15978acc472SPeter Tyser 
16078acc472SPeter Tyser   SRes (*Read)(void *p, void *buf, size_t *size);
16178acc472SPeter Tyser     /* reads directly (without buffer). It's same as ISeqInStream::Read */
16278acc472SPeter Tyser   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
16378acc472SPeter Tyser } ILookInStream;
16478acc472SPeter Tyser 
16578acc472SPeter Tyser SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);
16678acc472SPeter Tyser SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);
16778acc472SPeter Tyser 
16878acc472SPeter Tyser /* reads via ILookInStream::Read */
16978acc472SPeter Tyser SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);
17078acc472SPeter Tyser SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);
17178acc472SPeter Tyser 
17278acc472SPeter Tyser #define LookToRead_BUF_SIZE (1 << 14)
17378acc472SPeter Tyser 
17478acc472SPeter Tyser typedef struct
17578acc472SPeter Tyser {
17678acc472SPeter Tyser   ILookInStream s;
17778acc472SPeter Tyser   ISeekInStream *realStream;
17878acc472SPeter Tyser   size_t pos;
17978acc472SPeter Tyser   size_t size;
18078acc472SPeter Tyser   Byte buf[LookToRead_BUF_SIZE];
18178acc472SPeter Tyser } CLookToRead;
18278acc472SPeter Tyser 
18378acc472SPeter Tyser void LookToRead_CreateVTable(CLookToRead *p, int lookahead);
18478acc472SPeter Tyser void LookToRead_Init(CLookToRead *p);
18578acc472SPeter Tyser 
18678acc472SPeter Tyser typedef struct
18778acc472SPeter Tyser {
18878acc472SPeter Tyser   ISeqInStream s;
18978acc472SPeter Tyser   ILookInStream *realStream;
19078acc472SPeter Tyser } CSecToLook;
19178acc472SPeter Tyser 
19278acc472SPeter Tyser void SecToLook_CreateVTable(CSecToLook *p);
19378acc472SPeter Tyser 
19478acc472SPeter Tyser typedef struct
19578acc472SPeter Tyser {
19678acc472SPeter Tyser   ISeqInStream s;
19778acc472SPeter Tyser   ILookInStream *realStream;
19878acc472SPeter Tyser } CSecToRead;
19978acc472SPeter Tyser 
20078acc472SPeter Tyser void SecToRead_CreateVTable(CSecToRead *p);
20178acc472SPeter Tyser 
20278acc472SPeter Tyser typedef struct
20378acc472SPeter Tyser {
20478acc472SPeter Tyser   SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);
20578acc472SPeter Tyser     /* Returns: result. (result != SZ_OK) means break.
20678acc472SPeter Tyser        Value (UInt64)(Int64)-1 for size means unknown value. */
20778acc472SPeter Tyser } ICompressProgress;
20878acc472SPeter Tyser 
20978acc472SPeter Tyser typedef struct
21078acc472SPeter Tyser {
21178acc472SPeter Tyser   void *(*Alloc)(void *p, size_t size);
21278acc472SPeter Tyser   void (*Free)(void *p, void *address); /* address can be 0 */
21378acc472SPeter Tyser } ISzAlloc;
21478acc472SPeter Tyser 
21578acc472SPeter Tyser #define IAlloc_Alloc(p, size) (p)->Alloc((p), size)
21678acc472SPeter Tyser #define IAlloc_Free(p, a) (p)->Free((p), a)
21778acc472SPeter Tyser 
218*5fe8380dSStefan Reinauer #ifdef _WIN32
219*5fe8380dSStefan Reinauer 
220*5fe8380dSStefan Reinauer #define CHAR_PATH_SEPARATOR '\\'
221*5fe8380dSStefan Reinauer #define WCHAR_PATH_SEPARATOR L'\\'
222*5fe8380dSStefan Reinauer #define STRING_PATH_SEPARATOR "\\"
223*5fe8380dSStefan Reinauer #define WSTRING_PATH_SEPARATOR L"\\"
224*5fe8380dSStefan Reinauer 
225*5fe8380dSStefan Reinauer #else
226*5fe8380dSStefan Reinauer 
227*5fe8380dSStefan Reinauer #define CHAR_PATH_SEPARATOR '/'
228*5fe8380dSStefan Reinauer #define WCHAR_PATH_SEPARATOR L'/'
229*5fe8380dSStefan Reinauer #define STRING_PATH_SEPARATOR "/"
230*5fe8380dSStefan Reinauer #define WSTRING_PATH_SEPARATOR L"/"
231*5fe8380dSStefan Reinauer 
232*5fe8380dSStefan Reinauer #endif
233*5fe8380dSStefan Reinauer 
23478acc472SPeter Tyser #endif
235