Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F625732
7z.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None
7z.h
View Options
/* 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
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sat, Nov 14, 11:50 PM (1 d, 13 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
123935
Default Alt Text
7z.h (4 KB)
Attached To
Mode
R75 R-Tech1
Attached
Detach File
Event Timeline