-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
andon
authored and
andon
committed
Feb 1, 2017
1 parent
106c008
commit 0e1344e
Showing
89 changed files
with
19,095 additions
and
188 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
/* 7z.h -- 7z interface | ||
2015-11-18 : Igor Pavlov : Public domain */ | ||
|
||
#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; | ||
|
||
/* CSzCoderInfo & CSzFolder support only default methods */ | ||
|
||
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; /* 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 | ||
{ | ||
UInt32 NumPackStreams; | ||
UInt32 NumFolders; | ||
|
||
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 | ||
|
||
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, | ||
ISzAlloc *allocMain); | ||
|
||
typedef struct | ||
{ | ||
CSzAr db; | ||
|
||
UInt64 startPosAfterHeader; | ||
UInt64 dataPos; | ||
|
||
UInt32 NumFiles; | ||
|
||
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 */ | ||
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); | ||
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); | ||
|
||
/* | ||
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, | ||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* 7zAlloc.h -- Allocation functions | ||
2013-03-25 : Igor Pavlov : Public domain */ | ||
|
||
#ifndef __7Z_ALLOC_H | ||
#define __7Z_ALLOC_H | ||
|
||
#include <stdlib.h> | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
void *SzAlloc(void *p, size_t size); | ||
void SzFree(void *p, void *address); | ||
|
||
void *SzAllocTemp(void *p, size_t size); | ||
void SzFreeTemp(void *p, void *address); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* 7zBuf.h -- Byte Buffer | ||
2013-01-18 : Igor Pavlov : Public domain */ | ||
|
||
#ifndef __7Z_BUF_H | ||
#define __7Z_BUF_H | ||
|
||
#include "7zTypes.h" | ||
|
||
EXTERN_C_BEGIN | ||
|
||
typedef struct | ||
{ | ||
Byte *data; | ||
size_t size; | ||
} CBuf; | ||
|
||
void Buf_Init(CBuf *p); | ||
int Buf_Create(CBuf *p, size_t size, ISzAlloc *alloc); | ||
void Buf_Free(CBuf *p, ISzAlloc *alloc); | ||
|
||
typedef struct | ||
{ | ||
Byte *data; | ||
size_t size; | ||
size_t pos; | ||
} CDynBuf; | ||
|
||
void DynBuf_Construct(CDynBuf *p); | ||
void DynBuf_SeekToBeg(CDynBuf *p); | ||
int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAlloc *alloc); | ||
void DynBuf_Free(CDynBuf *p, ISzAlloc *alloc); | ||
|
||
EXTERN_C_END | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* 7zCrc.h -- CRC32 calculation | ||
2013-01-18 : Igor Pavlov : Public domain */ | ||
|
||
#ifndef __7Z_CRC_H | ||
#define __7Z_CRC_H | ||
|
||
#include "7zTypes.h" | ||
|
||
EXTERN_C_BEGIN | ||
|
||
extern UInt32 g_CrcTable[]; | ||
|
||
/* Call CrcGenerateTable one time before other CRC functions */ | ||
void MY_FAST_CALL CrcGenerateTable(void); | ||
|
||
#define CRC_INIT_VAL 0xFFFFFFFF | ||
#define CRC_GET_DIGEST(crc) ((crc) ^ CRC_INIT_VAL) | ||
#define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) | ||
|
||
UInt32 MY_FAST_CALL CrcUpdate(UInt32 crc, const void *data, size_t size); | ||
UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size); | ||
|
||
EXTERN_C_END | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
/* 7zFile.h -- File IO | ||
2013-01-18 : Igor Pavlov : Public domain */ | ||
|
||
#ifndef __7Z_FILE_H | ||
#define __7Z_FILE_H | ||
|
||
#ifdef _WIN32 | ||
#define USE_WINDOWS_FILE | ||
#endif | ||
|
||
#ifdef USE_WINDOWS_FILE | ||
#include <windows.h> | ||
#else | ||
#include <stdio.h> | ||
#endif | ||
|
||
#include "7zTypes.h" | ||
|
||
EXTERN_C_BEGIN | ||
|
||
/* ---------- File ---------- */ | ||
|
||
typedef struct | ||
{ | ||
#ifdef USE_WINDOWS_FILE | ||
HANDLE handle; | ||
#else | ||
FILE *file; | ||
#endif | ||
} CSzFile; | ||
|
||
void File_Construct(CSzFile *p); | ||
#if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE) | ||
WRes InFile_Open(CSzFile *p, const char *name); | ||
WRes OutFile_Open(CSzFile *p, const char *name); | ||
#endif | ||
#ifdef USE_WINDOWS_FILE | ||
WRes InFile_OpenW(CSzFile *p, const WCHAR *name); | ||
WRes OutFile_OpenW(CSzFile *p, const WCHAR *name); | ||
#endif | ||
WRes File_Close(CSzFile *p); | ||
|
||
/* reads max(*size, remain file's size) bytes */ | ||
WRes File_Read(CSzFile *p, void *data, size_t *size); | ||
|
||
/* writes *size bytes */ | ||
WRes File_Write(CSzFile *p, const void *data, size_t *size); | ||
|
||
WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin); | ||
WRes File_GetLength(CSzFile *p, UInt64 *length); | ||
|
||
|
||
/* ---------- FileInStream ---------- */ | ||
|
||
typedef struct | ||
{ | ||
ISeqInStream s; | ||
CSzFile file; | ||
} CFileSeqInStream; | ||
|
||
void FileSeqInStream_CreateVTable(CFileSeqInStream *p); | ||
|
||
|
||
typedef struct | ||
{ | ||
ISeekInStream s; | ||
CSzFile file; | ||
} CFileInStream; | ||
|
||
void FileInStream_CreateVTable(CFileInStream *p); | ||
|
||
|
||
typedef struct | ||
{ | ||
ISeqOutStream s; | ||
CSzFile file; | ||
} CFileOutStream; | ||
|
||
void FileOutStream_CreateVTable(CFileOutStream *p); | ||
|
||
EXTERN_C_END | ||
|
||
#endif |
Oops, something went wrong.