123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- #ifndef __7Z_H
- #define __7Z_H
- #include "7zTypes.h"
- EXTERN_C_BEGIN
- #define k7zStartHeaderSize 0x20
- #define k7zSignatureSize 6
- extern const Byte k7zSignature[k7zSignatureSize];
- typedef struct
- {
- const Byte *Data;
- size_t Size;
- } CSzData;
- typedef struct
- {
- size_t PropsOffset;
- UInt32 MethodID;
- Byte NumStreams;
- Byte PropsSize;
- } CSzCoderInfo;
- typedef struct
- {
- UInt32 InIndex;
- UInt32 OutIndex;
- } CSzBond;
- #define SZ_NUM_CODERS_IN_FOLDER_MAX 4
- #define SZ_NUM_BONDS_IN_FOLDER_MAX 3
- #define SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX 4
- typedef struct
- {
- UInt32 NumCoders;
- UInt32 NumBonds;
- UInt32 NumPackStreams;
- UInt32 UnpackStream;
- UInt32 PackStreams[SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX];
- CSzBond Bonds[SZ_NUM_BONDS_IN_FOLDER_MAX];
- CSzCoderInfo Coders[SZ_NUM_CODERS_IN_FOLDER_MAX];
- } CSzFolder;
- SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd);
- typedef struct
- {
- UInt32 Low;
- UInt32 High;
- } CNtfsFileTime;
- typedef struct
- {
- Byte *Defs;
- UInt32 *Vals;
- } CSzBitUi32s;
- typedef struct
- {
- Byte *Defs;
-
- CNtfsFileTime *Vals;
- } CSzBitUi64s;
- #define SzBitArray_Check(p, i) (((p)[(i) >> 3] & (0x80 >> ((i) & 7))) != 0)
- #define SzBitWithVals_Check(p, i) ((p)->Defs && ((p)->Defs[(i) >> 3] & (0x80 >> ((i) & 7))) != 0)
- typedef struct
- {
- UInt32 NumPackStreams;
- UInt32 NumFolders;
- UInt64 *PackPositions;
- CSzBitUi32s FolderCRCs;
- size_t *FoCodersOffsets;
- UInt32 *FoStartPackStreamIndex;
- UInt32 *FoToCoderUnpackSizes;
- Byte *FoToMainUnpackSizeIndex;
- UInt64 *CoderUnpackSizes;
- Byte *CodersData;
- } CSzAr;
- UInt64 SzAr_GetFolderUnpackSize(const CSzAr *p, UInt32 folderIndex);
- SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex,
- ILookInStream *stream, UInt64 startPos,
- Byte *outBuffer, size_t outSize,
- ISzAllocPtr allocMain);
- typedef struct
- {
- CSzAr db;
- UInt64 startPosAfterHeader;
- UInt64 dataPos;
-
- UInt32 NumFiles;
- UInt64 *UnpackPositions;
-
- Byte *IsDirs;
- CSzBitUi32s CRCs;
- CSzBitUi32s Attribs;
-
- CSzBitUi64s MTime;
- CSzBitUi64s CTime;
- UInt32 *FolderToFile;
- UInt32 *FileToFolder;
- size_t *FileNameOffsets;
- Byte *FileNames;
- } CSzArEx;
- #define SzArEx_IsDir(p, i) (SzBitArray_Check((p)->IsDirs, i))
- #define SzArEx_GetFileSize(p, i) ((p)->UnpackPositions[(i) + 1] - (p)->UnpackPositions[i])
- void SzArEx_Init(CSzArEx *p);
- void SzArEx_Free(CSzArEx *p, ISzAllocPtr alloc);
- UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder);
- int SzArEx_GetFolderFullPackSize(const CSzArEx *p, UInt32 folderIndex, UInt64 *resSize);
- size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest);
- SRes SzArEx_Extract(
- const CSzArEx *db,
- ILookInStream *inStream,
- UInt32 fileIndex,
- UInt32 *blockIndex,
- Byte **outBuffer,
- size_t *outBufferSize,
- size_t *offset,
- size_t *outSizeProcessed,
- ISzAllocPtr allocMain,
- ISzAllocPtr allocTemp);
- SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream,
- ISzAllocPtr allocMain, ISzAllocPtr allocTemp);
- EXTERN_C_END
- #endif
|