| Index: third_party/lzma_sdk/7z.h
|
| diff --git a/third_party/lzma_sdk/7z.h b/third_party/lzma_sdk/7z.h
|
| index 01c4cac6a7bec9ad60c762d2d82dad8cb151c45d..4768151948d3523cd4f5a38c34154828b9eaa475 100644
|
| --- a/third_party/lzma_sdk/7z.h
|
| +++ b/third_party/lzma_sdk/7z.h
|
| @@ -1,89 +1,57 @@
|
| /* 7z.h -- 7z interface
|
| -2010-03-11 : Igor Pavlov : Public domain */
|
| +2015-11-18 : Igor Pavlov : Public domain */
|
|
|
| #ifndef __7Z_H
|
| #define __7Z_H
|
|
|
| -#include "7zBuf.h"
|
| +#include "7zTypes.h"
|
|
|
| EXTERN_C_BEGIN
|
|
|
| #define k7zStartHeaderSize 0x20
|
| #define k7zSignatureSize 6
|
| -extern Byte k7zSignature[k7zSignatureSize];
|
| -#define k7zMajorVersion 0
|
|
|
| -enum EIdEnum
|
| +extern const Byte k7zSignature[k7zSignatureSize];
|
| +
|
| +typedef struct
|
| {
|
| - k7zIdEnd,
|
| - k7zIdHeader,
|
| - k7zIdArchiveProperties,
|
| - k7zIdAdditionalStreamsInfo,
|
| - k7zIdMainStreamsInfo,
|
| - k7zIdFilesInfo,
|
| - k7zIdPackInfo,
|
| - k7zIdUnpackInfo,
|
| - k7zIdSubStreamsInfo,
|
| - k7zIdSize,
|
| - k7zIdCRC,
|
| - k7zIdFolder,
|
| - k7zIdCodersUnpackSize,
|
| - k7zIdNumUnpackStream,
|
| - k7zIdEmptyStream,
|
| - k7zIdEmptyFile,
|
| - k7zIdAnti,
|
| - k7zIdName,
|
| - k7zIdCTime,
|
| - k7zIdATime,
|
| - k7zIdMTime,
|
| - k7zIdWinAttributes,
|
| - k7zIdComment,
|
| - k7zIdEncodedHeader,
|
| - k7zIdStartPos,
|
| - k7zIdDummy
|
| -};
|
| + const Byte *Data;
|
| + size_t Size;
|
| +} CSzData;
|
| +
|
| +/* CSzCoderInfo & CSzFolder support only default methods */
|
|
|
| typedef struct
|
| {
|
| - UInt32 NumInStreams;
|
| - UInt32 NumOutStreams;
|
| - UInt64 MethodID;
|
| - CBuf Props;
|
| + size_t PropsOffset;
|
| + UInt32 MethodID;
|
| + Byte NumStreams;
|
| + Byte PropsSize;
|
| } CSzCoderInfo;
|
|
|
| -void SzCoderInfo_Init(CSzCoderInfo *p);
|
| -void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc);
|
| -
|
| typedef struct
|
| {
|
| UInt32 InIndex;
|
| UInt32 OutIndex;
|
| -} CSzBindPair;
|
| +} 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
|
| {
|
| - CSzCoderInfo *Coders;
|
| - CSzBindPair *BindPairs;
|
| - UInt32 *PackStreams;
|
| - UInt64 *UnpackSizes;
|
| UInt32 NumCoders;
|
| - UInt32 NumBindPairs;
|
| + UInt32 NumBonds;
|
| UInt32 NumPackStreams;
|
| - int UnpackCRCDefined;
|
| - UInt32 UnpackCRC;
|
| -
|
| - UInt32 NumUnpackStreams;
|
| + 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;
|
|
|
| -void SzFolder_Init(CSzFolder *p);
|
| -UInt64 SzFolder_GetUnpackSize(CSzFolder *p);
|
| -int SzFolder_FindBindPairForInStream(CSzFolder *p, UInt32 inStreamIndex);
|
| -UInt32 SzFolder_GetNumOutStreams(CSzFolder *p);
|
| -UInt64 SzFolder_GetUnpackSize(CSzFolder *p);
|
|
|
| -SRes SzFolder_Decode(const CSzFolder *folder, const UInt64 *packSizes,
|
| - ILookInStream *stream, UInt64 startPos,
|
| - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain);
|
| +SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd);
|
|
|
| typedef struct
|
| {
|
| @@ -93,72 +61,75 @@ typedef struct
|
|
|
| typedef struct
|
| {
|
| - CNtfsFileTime MTime;
|
| - UInt64 Size;
|
| - UInt32 Crc;
|
| - UInt32 Attrib;
|
| - Byte HasStream;
|
| - Byte IsDir;
|
| - Byte IsAnti;
|
| - Byte CrcDefined;
|
| - Byte MTimeDefined;
|
| - Byte AttribDefined;
|
| -} CSzFileItem;
|
| -
|
| -void SzFile_Init(CSzFileItem *p);
|
| + Byte *Defs; /* MSB 0 bit numbering */
|
| + UInt32 *Vals;
|
| +} CSzBitUi32s;
|
| +
|
| +typedef struct
|
| +{
|
| + Byte *Defs; /* MSB 0 bit numbering */
|
| + // UInt64 *Vals;
|
| + 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
|
| {
|
| - UInt64 *PackSizes;
|
| - Byte *PackCRCsDefined;
|
| - UInt32 *PackCRCs;
|
| - CSzFolder *Folders;
|
| - CSzFileItem *Files;
|
| UInt32 NumPackStreams;
|
| UInt32 NumFolders;
|
| - UInt32 NumFiles;
|
| -} CSzAr;
|
|
|
| -void SzAr_Init(CSzAr *p);
|
| -void SzAr_Free(CSzAr *p, ISzAlloc *alloc);
|
| + UInt64 *PackPositions; // NumPackStreams + 1
|
| + CSzBitUi32s FolderCRCs; // NumFolders
|
|
|
| + size_t *FoCodersOffsets; // NumFolders + 1
|
| + UInt32 *FoStartPackStreamIndex; // NumFolders + 1
|
| + UInt32 *FoToCoderUnpackSizes; // NumFolders + 1
|
| + Byte *FoToMainUnpackSizeIndex; // NumFolders
|
| + UInt64 *CoderUnpackSizes; // for all coders in all folders
|
|
|
| -/*
|
| - SzExtract extracts file from archive
|
| + Byte *CodersData;
|
| +} CSzAr;
|
|
|
| - *outBuffer must be 0 before first call for each new archive.
|
| +UInt64 SzAr_GetFolderUnpackSize(const CSzAr *p, UInt32 folderIndex);
|
|
|
| - Extracting cache:
|
| - If you need to decompress more than one file, you can send
|
| - these values from previous call:
|
| - *blockIndex,
|
| - *outBuffer,
|
| - *outBufferSize
|
| - You can consider "*outBuffer" as cache of solid block. If your archive is solid,
|
| - it will increase decompression speed.
|
| -
|
| - If you use external function, you can declare these 3 cache variables
|
| - (blockIndex, outBuffer, outBufferSize) as static in that external function.
|
| -
|
| - Free *outBuffer and set *outBuffer to 0, if you want to flush cache.
|
| -*/
|
| +SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex,
|
| + ILookInStream *stream, UInt64 startPos,
|
| + Byte *outBuffer, size_t outSize,
|
| + ISzAlloc *allocMain);
|
|
|
| typedef struct
|
| {
|
| CSzAr db;
|
| -
|
| +
|
| UInt64 startPosAfterHeader;
|
| UInt64 dataPos;
|
| +
|
| + UInt32 NumFiles;
|
|
|
| - UInt32 *FolderStartPackStreamIndex;
|
| - UInt64 *PackStreamStartPositions;
|
| - UInt32 *FolderStartFileIndex;
|
| - UInt32 *FileIndexToFolderIndexMap;
|
| + UInt64 *UnpackPositions; // NumFiles + 1
|
| + // Byte *IsEmptyFiles;
|
| + Byte *IsDirs;
|
| + CSzBitUi32s CRCs;
|
| +
|
| + CSzBitUi32s Attribs;
|
| + // CSzBitUi32s Parents;
|
| + CSzBitUi64s MTime;
|
| + CSzBitUi64s CTime;
|
| +
|
| + UInt32 *FolderToFile; // NumFolders + 1
|
| + UInt32 *FileToFolder; // NumFiles
|
|
|
| size_t *FileNameOffsets; /* in 2-byte steps */
|
| - CBuf FileNames; /* UTF-16-LE */
|
| + Byte *FileNames; /* UTF-16-LE */
|
| } 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, ISzAlloc *alloc);
|
| UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder);
|
| @@ -172,6 +143,33 @@ if dest != NULL, the return value specifies the number of 16-bit characters that
|
|
|
| size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest);
|
|
|
| +/*
|
| +size_t SzArEx_GetFullNameLen(const CSzArEx *p, size_t fileIndex);
|
| +UInt16 *SzArEx_GetFullNameUtf16_Back(const CSzArEx *p, size_t fileIndex, UInt16 *dest);
|
| +*/
|
| +
|
| +
|
| +
|
| +/*
|
| + SzArEx_Extract extracts file from archive
|
| +
|
| + *outBuffer must be 0 before first call for each new archive.
|
| +
|
| + Extracting cache:
|
| + If you need to decompress more than one file, you can send
|
| + these values from previous call:
|
| + *blockIndex,
|
| + *outBuffer,
|
| + *outBufferSize
|
| + You can consider "*outBuffer" as cache of solid block. If your archive is solid,
|
| + it will increase decompression speed.
|
| +
|
| + If you use external function, you can declare these 3 cache variables
|
| + (blockIndex, outBuffer, outBufferSize) as static in that external function.
|
| +
|
| + Free *outBuffer and set *outBuffer to 0, if you want to flush cache.
|
| +*/
|
| +
|
| SRes SzArEx_Extract(
|
| const CSzArEx *db,
|
| ILookInStream *inStream,
|
| @@ -196,7 +194,8 @@ SZ_ERROR_INPUT_EOF
|
| SZ_ERROR_FAIL
|
| */
|
|
|
| -SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ISzAlloc *allocMain, ISzAlloc *allocTemp);
|
| +SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream,
|
| + ISzAlloc *allocMain, ISzAlloc *allocTemp);
|
|
|
| EXTERN_C_END
|
|
|
|
|