Index: third_party/lzma_sdk/7z.h |
diff --git a/third_party/lzma_sdk/7z.h b/third_party/lzma_sdk/7z.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..01c4cac6a7bec9ad60c762d2d82dad8cb151c45d |
--- /dev/null |
+++ b/third_party/lzma_sdk/7z.h |
@@ -0,0 +1,203 @@ |
+/* 7z.h -- 7z interface |
+2010-03-11 : Igor Pavlov : Public domain */ |
+ |
+#ifndef __7Z_H |
+#define __7Z_H |
+ |
+#include "7zBuf.h" |
+ |
+EXTERN_C_BEGIN |
+ |
+#define k7zStartHeaderSize 0x20 |
+#define k7zSignatureSize 6 |
+extern Byte k7zSignature[k7zSignatureSize]; |
+#define k7zMajorVersion 0 |
+ |
+enum EIdEnum |
+{ |
+ 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 |
+}; |
+ |
+typedef struct |
+{ |
+ UInt32 NumInStreams; |
+ UInt32 NumOutStreams; |
+ UInt64 MethodID; |
+ CBuf Props; |
+} CSzCoderInfo; |
+ |
+void SzCoderInfo_Init(CSzCoderInfo *p); |
+void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc); |
+ |
+typedef struct |
+{ |
+ UInt32 InIndex; |
+ UInt32 OutIndex; |
+} CSzBindPair; |
+ |
+typedef struct |
+{ |
+ CSzCoderInfo *Coders; |
+ CSzBindPair *BindPairs; |
+ UInt32 *PackStreams; |
+ UInt64 *UnpackSizes; |
+ UInt32 NumCoders; |
+ UInt32 NumBindPairs; |
+ UInt32 NumPackStreams; |
+ int UnpackCRCDefined; |
+ UInt32 UnpackCRC; |
+ |
+ UInt32 NumUnpackStreams; |
+} 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); |
+ |
+typedef struct |
+{ |
+ UInt32 Low; |
+ UInt32 High; |
+} CNtfsFileTime; |
+ |
+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); |
+ |
+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); |
+ |
+ |
+/* |
+ SzExtract 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. |
+*/ |
+ |
+typedef struct |
+{ |
+ CSzAr db; |
+ |
+ UInt64 startPosAfterHeader; |
+ UInt64 dataPos; |
+ |
+ UInt32 *FolderStartPackStreamIndex; |
+ UInt64 *PackStreamStartPositions; |
+ UInt32 *FolderStartFileIndex; |
+ UInt32 *FileIndexToFolderIndexMap; |
+ |
+ size_t *FileNameOffsets; /* in 2-byte steps */ |
+ CBuf FileNames; /* UTF-16-LE */ |
+} CSzArEx; |
+ |
+void SzArEx_Init(CSzArEx *p); |
+void SzArEx_Free(CSzArEx *p, ISzAlloc *alloc); |
+UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder); |
+int SzArEx_GetFolderFullPackSize(const CSzArEx *p, UInt32 folderIndex, UInt64 *resSize); |
+ |
+/* |
+if dest == NULL, the return value specifies the required size of the buffer, |
+ in 16-bit characters, including the null-terminating character. |
+if dest != NULL, the return value specifies the number of 16-bit characters that |
+ are written to the dest, including the null-terminating character. */ |
+ |
+size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest); |
+ |
+SRes SzArEx_Extract( |
+ const CSzArEx *db, |
+ ILookInStream *inStream, |
+ UInt32 fileIndex, /* index of file */ |
+ UInt32 *blockIndex, /* index of solid block */ |
+ Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ |
+ size_t *outBufferSize, /* buffer size for output buffer */ |
+ size_t *offset, /* offset of stream for required file in *outBuffer */ |
+ size_t *outSizeProcessed, /* size of file in *outBuffer */ |
+ ISzAlloc *allocMain, |
+ ISzAlloc *allocTemp); |
+ |
+ |
+/* |
+SzArEx_Open Errors: |
+SZ_ERROR_NO_ARCHIVE |
+SZ_ERROR_ARCHIVE |
+SZ_ERROR_UNSUPPORTED |
+SZ_ERROR_MEM |
+SZ_ERROR_CRC |
+SZ_ERROR_INPUT_EOF |
+SZ_ERROR_FAIL |
+*/ |
+ |
+SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ISzAlloc *allocMain, ISzAlloc *allocTemp); |
+ |
+EXTERN_C_END |
+ |
+#endif |