xref: /aosp_15_r20/external/lzma/DOC/7zC.txt (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C Decoder 9.35
2*f6dc9357SAndroid Build Coastguard Worker----------------------
3*f6dc9357SAndroid Build Coastguard Worker
4*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C provides 7z/LZMA decoding.
5*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C version is simplified version ported from C++ code.
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard WorkerLZMA is default and general compression method of 7z format
8*f6dc9357SAndroid Build Coastguard Workerin 7-Zip compression program (www.7-zip.org). LZMA provides high
9*f6dc9357SAndroid Build Coastguard Workercompression ratio and very fast decompression.
10*f6dc9357SAndroid Build Coastguard Worker
11*f6dc9357SAndroid Build Coastguard Worker
12*f6dc9357SAndroid Build Coastguard WorkerLICENSE
13*f6dc9357SAndroid Build Coastguard Worker-------
14*f6dc9357SAndroid Build Coastguard Worker
15*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C Decoder is part of the LZMA SDK.
16*f6dc9357SAndroid Build Coastguard WorkerLZMA SDK is written and placed in the public domain by Igor Pavlov.
17*f6dc9357SAndroid Build Coastguard Worker
18*f6dc9357SAndroid Build Coastguard WorkerFiles
19*f6dc9357SAndroid Build Coastguard Worker---------------------
20*f6dc9357SAndroid Build Coastguard Worker
21*f6dc9357SAndroid Build Coastguard Worker7zDecode.*   - Low level 7z decoding
22*f6dc9357SAndroid Build Coastguard Worker7zExtract.*  - High level 7z decoding
23*f6dc9357SAndroid Build Coastguard Worker7zHeader.*   - .7z format constants
24*f6dc9357SAndroid Build Coastguard Worker7zIn.*       - .7z archive opening
25*f6dc9357SAndroid Build Coastguard Worker7zItem.*     - .7z structures
26*f6dc9357SAndroid Build Coastguard Worker7zMain.c     - Test application
27*f6dc9357SAndroid Build Coastguard Worker
28*f6dc9357SAndroid Build Coastguard Worker
29*f6dc9357SAndroid Build Coastguard WorkerHow To Use
30*f6dc9357SAndroid Build Coastguard Worker----------
31*f6dc9357SAndroid Build Coastguard Worker
32*f6dc9357SAndroid Build Coastguard WorkerYou can create .7z archive with 7z.exe, 7za.exe or 7zr.exe:
33*f6dc9357SAndroid Build Coastguard Worker
34*f6dc9357SAndroid Build Coastguard Worker  7z.exe a archive.7z *.htm -r -mx -m0fb=255
35*f6dc9357SAndroid Build Coastguard Worker
36*f6dc9357SAndroid Build Coastguard WorkerIf you have big number of files in archive, and you need fast extracting,
37*f6dc9357SAndroid Build Coastguard Workeryou can use partly-solid archives:
38*f6dc9357SAndroid Build Coastguard Worker
39*f6dc9357SAndroid Build Coastguard Worker  7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K
40*f6dc9357SAndroid Build Coastguard Worker
41*f6dc9357SAndroid Build Coastguard WorkerIn that example 7-Zip will use 512KB solid blocks. So it needs to decompress only
42*f6dc9357SAndroid Build Coastguard Worker512KB for extracting one file from such archive.
43*f6dc9357SAndroid Build Coastguard Worker
44*f6dc9357SAndroid Build Coastguard Worker
45*f6dc9357SAndroid Build Coastguard WorkerLimitations of current version of 7z ANSI-C Decoder
46*f6dc9357SAndroid Build Coastguard Worker---------------------------------------------------
47*f6dc9357SAndroid Build Coastguard Worker
48*f6dc9357SAndroid Build Coastguard Worker - It reads only "FileName", "Size", "LastWriteTime" and "CRC" information for each file in archive.
49*f6dc9357SAndroid Build Coastguard Worker - It supports only LZMA and Copy (no compression) methods with BCJ or BCJ2 filters.
50*f6dc9357SAndroid Build Coastguard Worker - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names.
51*f6dc9357SAndroid Build Coastguard Worker
52*f6dc9357SAndroid Build Coastguard WorkerThese limitations will be fixed in future versions.
53*f6dc9357SAndroid Build Coastguard Worker
54*f6dc9357SAndroid Build Coastguard Worker
55*f6dc9357SAndroid Build Coastguard WorkerUsing 7z ANSI-C Decoder Test application:
56*f6dc9357SAndroid Build Coastguard Worker-----------------------------------------
57*f6dc9357SAndroid Build Coastguard Worker
58*f6dc9357SAndroid Build Coastguard WorkerUsage: 7zDec <command> <archive_name>
59*f6dc9357SAndroid Build Coastguard Worker
60*f6dc9357SAndroid Build Coastguard Worker<Command>:
61*f6dc9357SAndroid Build Coastguard Worker  e: Extract files from archive
62*f6dc9357SAndroid Build Coastguard Worker  l: List contents of archive
63*f6dc9357SAndroid Build Coastguard Worker  t: Test integrity of archive
64*f6dc9357SAndroid Build Coastguard Worker
65*f6dc9357SAndroid Build Coastguard WorkerExample:
66*f6dc9357SAndroid Build Coastguard Worker
67*f6dc9357SAndroid Build Coastguard Worker  7zDec l archive.7z
68*f6dc9357SAndroid Build Coastguard Worker
69*f6dc9357SAndroid Build Coastguard Workerlists contents of archive.7z
70*f6dc9357SAndroid Build Coastguard Worker
71*f6dc9357SAndroid Build Coastguard Worker  7zDec e archive.7z
72*f6dc9357SAndroid Build Coastguard Worker
73*f6dc9357SAndroid Build Coastguard Workerextracts files from archive.7z to current folder.
74*f6dc9357SAndroid Build Coastguard Worker
75*f6dc9357SAndroid Build Coastguard Worker
76*f6dc9357SAndroid Build Coastguard WorkerHow to use .7z Decoder
77*f6dc9357SAndroid Build Coastguard Worker----------------------
78*f6dc9357SAndroid Build Coastguard Worker
79*f6dc9357SAndroid Build Coastguard WorkerMemory allocation
80*f6dc9357SAndroid Build Coastguard Worker~~~~~~~~~~~~~~~~~
81*f6dc9357SAndroid Build Coastguard Worker
82*f6dc9357SAndroid Build Coastguard Worker7z Decoder uses two memory pools:
83*f6dc9357SAndroid Build Coastguard Worker1) Temporary pool
84*f6dc9357SAndroid Build Coastguard Worker2) Main pool
85*f6dc9357SAndroid Build Coastguard WorkerSuch scheme can allow you to avoid fragmentation of allocated blocks.
86*f6dc9357SAndroid Build Coastguard Worker
87*f6dc9357SAndroid Build Coastguard Worker
88*f6dc9357SAndroid Build Coastguard WorkerSteps for using 7z decoder
89*f6dc9357SAndroid Build Coastguard Worker--------------------------
90*f6dc9357SAndroid Build Coastguard Worker
91*f6dc9357SAndroid Build Coastguard WorkerUse code at 7zMain.c as example.
92*f6dc9357SAndroid Build Coastguard Worker
93*f6dc9357SAndroid Build Coastguard Worker1) Declare variables:
94*f6dc9357SAndroid Build Coastguard Worker  inStream                 /* implements ILookInStream interface */
95*f6dc9357SAndroid Build Coastguard Worker  CSzArEx db;              /* 7z archive database structure */
96*f6dc9357SAndroid Build Coastguard Worker  ISzAlloc allocImp;       /* memory functions for main pool */
97*f6dc9357SAndroid Build Coastguard Worker  ISzAlloc allocTempImp;   /* memory functions for temporary pool */
98*f6dc9357SAndroid Build Coastguard Worker
99*f6dc9357SAndroid Build Coastguard Worker2) call CrcGenerateTable(); function to initialize CRC structures.
100*f6dc9357SAndroid Build Coastguard Worker
101*f6dc9357SAndroid Build Coastguard Worker3) call SzArEx_Init(&db); function to initialize db structures.
102*f6dc9357SAndroid Build Coastguard Worker
103*f6dc9357SAndroid Build Coastguard Worker4) call SzArEx_Open(&db, inStream, &allocMain, &allocTemp) to open archive
104*f6dc9357SAndroid Build Coastguard Worker
105*f6dc9357SAndroid Build Coastguard WorkerThis function opens archive "inStream" and reads headers to "db".
106*f6dc9357SAndroid Build Coastguard WorkerAll items in "db" will be allocated with "allocMain" functions.
107*f6dc9357SAndroid Build Coastguard WorkerSzArEx_Open function allocates and frees temporary structures by "allocTemp" functions.
108*f6dc9357SAndroid Build Coastguard Worker
109*f6dc9357SAndroid Build Coastguard Worker5) List items or Extract items
110*f6dc9357SAndroid Build Coastguard Worker
111*f6dc9357SAndroid Build Coastguard Worker  Listing code:
112*f6dc9357SAndroid Build Coastguard Worker  ~~~~~~~~~~~~~
113*f6dc9357SAndroid Build Coastguard Worker
114*f6dc9357SAndroid Build Coastguard Worker    Use SzArEx_GetFileNameUtf16 function. Look example code in C\Util\7z\7zMain.c file.
115*f6dc9357SAndroid Build Coastguard Worker
116*f6dc9357SAndroid Build Coastguard Worker
117*f6dc9357SAndroid Build Coastguard Worker  Extracting code:
118*f6dc9357SAndroid Build Coastguard Worker  ~~~~~~~~~~~~~~~~
119*f6dc9357SAndroid Build Coastguard Worker
120*f6dc9357SAndroid Build Coastguard Worker  SZ_RESULT SzAr_Extract(
121*f6dc9357SAndroid Build Coastguard Worker    CArchiveDatabaseEx *db,
122*f6dc9357SAndroid Build Coastguard Worker    ILookInStream *inStream,
123*f6dc9357SAndroid Build Coastguard Worker    UInt32 fileIndex,         /* index of file */
124*f6dc9357SAndroid Build Coastguard Worker    UInt32 *blockIndex,       /* index of solid block */
125*f6dc9357SAndroid Build Coastguard Worker    Byte **outBuffer,         /* pointer to pointer to output buffer (allocated with allocMain) */
126*f6dc9357SAndroid Build Coastguard Worker    size_t *outBufferSize,    /* buffer size for output buffer */
127*f6dc9357SAndroid Build Coastguard Worker    size_t *offset,           /* offset of stream for required file in *outBuffer */
128*f6dc9357SAndroid Build Coastguard Worker    size_t *outSizeProcessed, /* size of file in *outBuffer */
129*f6dc9357SAndroid Build Coastguard Worker    ISzAlloc *allocMain,
130*f6dc9357SAndroid Build Coastguard Worker    ISzAlloc *allocTemp);
131*f6dc9357SAndroid Build Coastguard Worker
132*f6dc9357SAndroid Build Coastguard Worker  If you need to decompress more than one file, you can send these values from previous call:
133*f6dc9357SAndroid Build Coastguard Worker    blockIndex,
134*f6dc9357SAndroid Build Coastguard Worker    outBuffer,
135*f6dc9357SAndroid Build Coastguard Worker    outBufferSize,
136*f6dc9357SAndroid Build Coastguard Worker  You can consider "outBuffer" as cache of solid block. If your archive is solid,
137*f6dc9357SAndroid Build Coastguard Worker  it will increase decompression speed.
138*f6dc9357SAndroid Build Coastguard Worker
139*f6dc9357SAndroid Build Coastguard Worker  After decompressing you must free "outBuffer":
140*f6dc9357SAndroid Build Coastguard Worker  allocImp.Free(outBuffer);
141*f6dc9357SAndroid Build Coastguard Worker
142*f6dc9357SAndroid Build Coastguard Worker6) call SzArEx_Free(&db, allocImp.Free) to free allocated items in "db".
143*f6dc9357SAndroid Build Coastguard Worker
144*f6dc9357SAndroid Build Coastguard Worker
145*f6dc9357SAndroid Build Coastguard Worker
146*f6dc9357SAndroid Build Coastguard Worker
147*f6dc9357SAndroid Build Coastguard WorkerMemory requirements for .7z decoding
148*f6dc9357SAndroid Build Coastguard Worker------------------------------------
149*f6dc9357SAndroid Build Coastguard Worker
150*f6dc9357SAndroid Build Coastguard WorkerMemory usage for Archive opening:
151*f6dc9357SAndroid Build Coastguard Worker  - Temporary pool:
152*f6dc9357SAndroid Build Coastguard Worker     - Memory for uncompressed .7z headers
153*f6dc9357SAndroid Build Coastguard Worker     - some other temporary blocks
154*f6dc9357SAndroid Build Coastguard Worker  - Main pool:
155*f6dc9357SAndroid Build Coastguard Worker     - Memory for database:
156*f6dc9357SAndroid Build Coastguard Worker       Estimated size of one file structures in solid archive:
157*f6dc9357SAndroid Build Coastguard Worker         - Size (4 or 8 Bytes)
158*f6dc9357SAndroid Build Coastguard Worker         - CRC32 (4 bytes)
159*f6dc9357SAndroid Build Coastguard Worker         - LastWriteTime (8 bytes)
160*f6dc9357SAndroid Build Coastguard Worker         - Some file information (4 bytes)
161*f6dc9357SAndroid Build Coastguard Worker         - File Name (variable length) + pointer + allocation structures
162*f6dc9357SAndroid Build Coastguard Worker
163*f6dc9357SAndroid Build Coastguard WorkerMemory usage for archive Decompressing:
164*f6dc9357SAndroid Build Coastguard Worker  - Temporary pool:
165*f6dc9357SAndroid Build Coastguard Worker     - Memory for LZMA decompressing structures
166*f6dc9357SAndroid Build Coastguard Worker  - Main pool:
167*f6dc9357SAndroid Build Coastguard Worker     - Memory for decompressed solid block
168*f6dc9357SAndroid Build Coastguard Worker     - Memory for temprorary buffers, if BCJ2 fileter is used. Usually these
169*f6dc9357SAndroid Build Coastguard Worker       temprorary buffers can be about 15% of solid block size.
170*f6dc9357SAndroid Build Coastguard Worker
171*f6dc9357SAndroid Build Coastguard Worker
172*f6dc9357SAndroid Build Coastguard Worker7z Decoder doesn't allocate memory for compressed blocks.
173*f6dc9357SAndroid Build Coastguard WorkerInstead of this, you must allocate buffer with desired
174*f6dc9357SAndroid Build Coastguard Workersize before calling 7z Decoder. Use 7zMain.c as example.
175*f6dc9357SAndroid Build Coastguard Worker
176*f6dc9357SAndroid Build Coastguard Worker
177*f6dc9357SAndroid Build Coastguard WorkerDefines
178*f6dc9357SAndroid Build Coastguard Worker-------
179*f6dc9357SAndroid Build Coastguard Worker
180*f6dc9357SAndroid Build Coastguard Worker_SZ_ALLOC_DEBUG   - define it if you want to debug alloc/free operations to stderr.
181*f6dc9357SAndroid Build Coastguard Worker
182*f6dc9357SAndroid Build Coastguard Worker
183*f6dc9357SAndroid Build Coastguard Worker---
184*f6dc9357SAndroid Build Coastguard Worker
185*f6dc9357SAndroid Build Coastguard Workerhttp://www.7-zip.org
186*f6dc9357SAndroid Build Coastguard Workerhttp://www.7-zip.org/sdk.html
187*f6dc9357SAndroid Build Coastguard Workerhttp://www.7-zip.org/support.html
188