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