rlm@1
|
1 // Archive/Zip/Header.h
|
rlm@1
|
2
|
rlm@1
|
3 #ifndef __ARCHIVE_ZIP_HEADER_H
|
rlm@1
|
4 #define __ARCHIVE_ZIP_HEADER_H
|
rlm@1
|
5
|
rlm@1
|
6 #include "../../../Common/Types.h"
|
rlm@1
|
7
|
rlm@1
|
8 namespace NArchive {
|
rlm@1
|
9 namespace NZip {
|
rlm@1
|
10
|
rlm@1
|
11 namespace NSignature
|
rlm@1
|
12 {
|
rlm@1
|
13 extern UInt32 kLocalFileHeader;
|
rlm@1
|
14 extern UInt32 kDataDescriptor;
|
rlm@1
|
15 extern UInt32 kCentralFileHeader;
|
rlm@1
|
16 extern UInt32 kEndOfCentralDir;
|
rlm@1
|
17 extern UInt32 kZip64EndOfCentralDir;
|
rlm@1
|
18 extern UInt32 kZip64EndOfCentralDirLocator;
|
rlm@1
|
19
|
rlm@1
|
20 static const UInt32 kMarkerSize = 4;
|
rlm@1
|
21 }
|
rlm@1
|
22
|
rlm@1
|
23 const UInt32 kEcdSize = 22;
|
rlm@1
|
24 const UInt32 kZip64EcdSize = 44;
|
rlm@1
|
25 const UInt32 kZip64EcdLocatorSize = 20;
|
rlm@1
|
26 /*
|
rlm@1
|
27 struct CEndOfCentralDirectoryRecord
|
rlm@1
|
28 {
|
rlm@1
|
29 UInt16 ThisDiskNumber;
|
rlm@1
|
30 UInt16 StartCentralDirectoryDiskNumber;
|
rlm@1
|
31 UInt16 NumEntriesInCentaralDirectoryOnThisDisk;
|
rlm@1
|
32 UInt16 NumEntriesInCentaralDirectory;
|
rlm@1
|
33 UInt32 CentralDirectorySize;
|
rlm@1
|
34 UInt32 CentralDirectoryStartOffset;
|
rlm@1
|
35 UInt16 CommentSize;
|
rlm@1
|
36 };
|
rlm@1
|
37
|
rlm@1
|
38 struct CEndOfCentralDirectoryRecordFull
|
rlm@1
|
39 {
|
rlm@1
|
40 UInt32 Signature;
|
rlm@1
|
41 CEndOfCentralDirectoryRecord Header;
|
rlm@1
|
42 };
|
rlm@1
|
43 */
|
rlm@1
|
44
|
rlm@1
|
45 namespace NFileHeader
|
rlm@1
|
46 {
|
rlm@1
|
47 /*
|
rlm@1
|
48 struct CVersion
|
rlm@1
|
49 {
|
rlm@1
|
50 Byte Version;
|
rlm@1
|
51 Byte HostOS;
|
rlm@1
|
52 };
|
rlm@1
|
53 */
|
rlm@1
|
54
|
rlm@1
|
55 namespace NCompressionMethod
|
rlm@1
|
56 {
|
rlm@1
|
57 enum EType
|
rlm@1
|
58 {
|
rlm@1
|
59 kStored = 0,
|
rlm@1
|
60 kShrunk = 1,
|
rlm@1
|
61 kReduced1 = 2,
|
rlm@1
|
62 kReduced2 = 3,
|
rlm@1
|
63 kReduced3 = 4,
|
rlm@1
|
64 kReduced4 = 5,
|
rlm@1
|
65 kImploded = 6,
|
rlm@1
|
66 kReservedTokenizing = 7, // reserved for tokenizing
|
rlm@1
|
67 kDeflated = 8,
|
rlm@1
|
68 kDeflated64 = 9,
|
rlm@1
|
69 kPKImploding = 10,
|
rlm@1
|
70
|
rlm@1
|
71 kBZip2 = 12,
|
rlm@1
|
72 kLZMA = 14,
|
rlm@1
|
73 kTerse = 18,
|
rlm@1
|
74 kLz77 = 19,
|
rlm@1
|
75 kJpeg = 0x60,
|
rlm@1
|
76 kWavPack = 0x61,
|
rlm@1
|
77 kPPMd = 0x62,
|
rlm@1
|
78 kWzAES = 0x63
|
rlm@1
|
79 };
|
rlm@1
|
80 const int kNumCompressionMethods = 11;
|
rlm@1
|
81 const Byte kMadeByProgramVersion = 20;
|
rlm@1
|
82
|
rlm@1
|
83 const Byte kDeflateExtractVersion = 20;
|
rlm@1
|
84 const Byte kStoreExtractVersion = 10;
|
rlm@1
|
85
|
rlm@1
|
86 const Byte kSupportedVersion = 20;
|
rlm@1
|
87 }
|
rlm@1
|
88
|
rlm@1
|
89 namespace NExtraID
|
rlm@1
|
90 {
|
rlm@1
|
91 enum
|
rlm@1
|
92 {
|
rlm@1
|
93 kZip64 = 0x01,
|
rlm@1
|
94 kNTFS = 0x0A,
|
rlm@1
|
95 kStrongEncrypt = 0x17,
|
rlm@1
|
96 kWzAES = 0x9901
|
rlm@1
|
97 };
|
rlm@1
|
98 }
|
rlm@1
|
99
|
rlm@1
|
100 namespace NNtfsExtra
|
rlm@1
|
101 {
|
rlm@1
|
102 const UInt16 kTagTime = 1;
|
rlm@1
|
103 enum
|
rlm@1
|
104 {
|
rlm@1
|
105 kMTime = 0,
|
rlm@1
|
106 kATime = 1,
|
rlm@1
|
107 kCTime = 2
|
rlm@1
|
108 };
|
rlm@1
|
109 }
|
rlm@1
|
110
|
rlm@1
|
111 const UInt32 kLocalBlockSize = 26;
|
rlm@1
|
112 /*
|
rlm@1
|
113 struct CLocalBlock
|
rlm@1
|
114 {
|
rlm@1
|
115 CVersion ExtractVersion;
|
rlm@1
|
116
|
rlm@1
|
117 UInt16 Flags;
|
rlm@1
|
118 UInt16 CompressionMethod;
|
rlm@1
|
119 UInt32 Time;
|
rlm@1
|
120 UInt32 FileCRC;
|
rlm@1
|
121 UInt32 PackSize;
|
rlm@1
|
122 UInt32 UnPackSize;
|
rlm@1
|
123 UInt16 NameSize;
|
rlm@1
|
124 UInt16 ExtraSize;
|
rlm@1
|
125 };
|
rlm@1
|
126 */
|
rlm@1
|
127
|
rlm@1
|
128 const UInt32 kDataDescriptorSize = 16;
|
rlm@1
|
129 // const UInt32 kDataDescriptor64Size = 16 + 8;
|
rlm@1
|
130 /*
|
rlm@1
|
131 struct CDataDescriptor
|
rlm@1
|
132 {
|
rlm@1
|
133 UInt32 Signature;
|
rlm@1
|
134 UInt32 FileCRC;
|
rlm@1
|
135 UInt32 PackSize;
|
rlm@1
|
136 UInt32 UnPackSize;
|
rlm@1
|
137 };
|
rlm@1
|
138
|
rlm@1
|
139 struct CLocalBlockFull
|
rlm@1
|
140 {
|
rlm@1
|
141 UInt32 Signature;
|
rlm@1
|
142 CLocalBlock Header;
|
rlm@1
|
143 };
|
rlm@1
|
144 */
|
rlm@1
|
145
|
rlm@1
|
146 const UInt32 kCentralBlockSize = 42;
|
rlm@1
|
147 /*
|
rlm@1
|
148 struct CBlock
|
rlm@1
|
149 {
|
rlm@1
|
150 CVersion MadeByVersion;
|
rlm@1
|
151 CVersion ExtractVersion;
|
rlm@1
|
152 UInt16 Flags;
|
rlm@1
|
153 UInt16 CompressionMethod;
|
rlm@1
|
154 UInt32 Time;
|
rlm@1
|
155 UInt32 FileCRC;
|
rlm@1
|
156 UInt32 PackSize;
|
rlm@1
|
157 UInt32 UnPackSize;
|
rlm@1
|
158 UInt16 NameSize;
|
rlm@1
|
159 UInt16 ExtraSize;
|
rlm@1
|
160 UInt16 CommentSize;
|
rlm@1
|
161 UInt16 DiskNumberStart;
|
rlm@1
|
162 UInt16 InternalAttributes;
|
rlm@1
|
163 UInt32 ExternalAttributes;
|
rlm@1
|
164 UInt32 LocalHeaderOffset;
|
rlm@1
|
165 };
|
rlm@1
|
166
|
rlm@1
|
167 struct CBlockFull
|
rlm@1
|
168 {
|
rlm@1
|
169 UInt32 Signature;
|
rlm@1
|
170 CBlock Header;
|
rlm@1
|
171 };
|
rlm@1
|
172 */
|
rlm@1
|
173
|
rlm@1
|
174 namespace NFlags
|
rlm@1
|
175 {
|
rlm@1
|
176 const int kEncrypted = 1 << 0;
|
rlm@1
|
177 const int kLzmaEOS = 1 << 1;
|
rlm@1
|
178 const int kDescriptorUsedMask = 1 << 3;
|
rlm@1
|
179 const int kStrongEncrypted = 1 << 6;
|
rlm@1
|
180 const int kUtf8 = 1 << 11;
|
rlm@1
|
181
|
rlm@1
|
182 const int kImplodeDictionarySizeMask = 1 << 1;
|
rlm@1
|
183 const int kImplodeLiteralsOnMask = 1 << 2;
|
rlm@1
|
184
|
rlm@1
|
185 const int kDeflateTypeBitStart = 1;
|
rlm@1
|
186 const int kNumDeflateTypeBits = 2;
|
rlm@1
|
187 const int kNumDeflateTypes = (1 << kNumDeflateTypeBits);
|
rlm@1
|
188 const int kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1;
|
rlm@1
|
189 }
|
rlm@1
|
190
|
rlm@1
|
191 namespace NHostOS
|
rlm@1
|
192 {
|
rlm@1
|
193 enum EEnum
|
rlm@1
|
194 {
|
rlm@1
|
195 kFAT = 0,
|
rlm@1
|
196 kAMIGA = 1,
|
rlm@1
|
197 kVMS = 2, // VAX/VMS
|
rlm@1
|
198 kUnix = 3,
|
rlm@1
|
199 kVM_CMS = 4,
|
rlm@1
|
200 kAtari = 5, // what if it's a minix filesystem? [cjh]
|
rlm@1
|
201 kHPFS = 6, // filesystem used by OS/2 (and NT 3.x)
|
rlm@1
|
202 kMac = 7,
|
rlm@1
|
203 kZ_System = 8,
|
rlm@1
|
204 kCPM = 9,
|
rlm@1
|
205 kTOPS20 = 10, // pkzip 2.50 NTFS
|
rlm@1
|
206 kNTFS = 11, // filesystem used by Windows NT
|
rlm@1
|
207 kQDOS = 12, // SMS/QDOS
|
rlm@1
|
208 kAcorn = 13, // Archimedes Acorn RISC OS
|
rlm@1
|
209 kVFAT = 14, // filesystem used by Windows 95, NT
|
rlm@1
|
210 kMVS = 15,
|
rlm@1
|
211 kBeOS = 16, // hybrid POSIX/database filesystem
|
rlm@1
|
212 kTandem = 17,
|
rlm@1
|
213 kOS400 = 18,
|
rlm@1
|
214 kOSX = 19
|
rlm@1
|
215 };
|
rlm@1
|
216 }
|
rlm@1
|
217 namespace NUnixAttribute
|
rlm@1
|
218 {
|
rlm@1
|
219 const UInt32 kIFMT = 0170000; /* Unix file type mask */
|
rlm@1
|
220
|
rlm@1
|
221 const UInt32 kIFDIR = 0040000; /* Unix directory */
|
rlm@1
|
222 const UInt32 kIFREG = 0100000; /* Unix regular file */
|
rlm@1
|
223 const UInt32 kIFSOCK = 0140000; /* Unix socket (BSD, not SysV or Amiga) */
|
rlm@1
|
224 const UInt32 kIFLNK = 0120000; /* Unix symbolic link (not SysV, Amiga) */
|
rlm@1
|
225 const UInt32 kIFBLK = 0060000; /* Unix block special (not Amiga) */
|
rlm@1
|
226 const UInt32 kIFCHR = 0020000; /* Unix character special (not Amiga) */
|
rlm@1
|
227 const UInt32 kIFIFO = 0010000; /* Unix fifo (BCC, not MSC or Amiga) */
|
rlm@1
|
228
|
rlm@1
|
229 const UInt32 kISUID = 04000; /* Unix set user id on execution */
|
rlm@1
|
230 const UInt32 kISGID = 02000; /* Unix set group id on execution */
|
rlm@1
|
231 const UInt32 kISVTX = 01000; /* Unix directory permissions control */
|
rlm@1
|
232 const UInt32 kENFMT = kISGID; /* Unix record locking enforcement flag */
|
rlm@1
|
233 const UInt32 kIRWXU = 00700; /* Unix read, write, execute: owner */
|
rlm@1
|
234 const UInt32 kIRUSR = 00400; /* Unix read permission: owner */
|
rlm@1
|
235 const UInt32 kIWUSR = 00200; /* Unix write permission: owner */
|
rlm@1
|
236 const UInt32 kIXUSR = 00100; /* Unix execute permission: owner */
|
rlm@1
|
237 const UInt32 kIRWXG = 00070; /* Unix read, write, execute: group */
|
rlm@1
|
238 const UInt32 kIRGRP = 00040; /* Unix read permission: group */
|
rlm@1
|
239 const UInt32 kIWGRP = 00020; /* Unix write permission: group */
|
rlm@1
|
240 const UInt32 kIXGRP = 00010; /* Unix execute permission: group */
|
rlm@1
|
241 const UInt32 kIRWXO = 00007; /* Unix read, write, execute: other */
|
rlm@1
|
242 const UInt32 kIROTH = 00004; /* Unix read permission: other */
|
rlm@1
|
243 const UInt32 kIWOTH = 00002; /* Unix write permission: other */
|
rlm@1
|
244 const UInt32 kIXOTH = 00001; /* Unix execute permission: other */
|
rlm@1
|
245 }
|
rlm@1
|
246
|
rlm@1
|
247 namespace NAmigaAttribute
|
rlm@1
|
248 {
|
rlm@1
|
249 const UInt32 kIFMT = 06000; /* Amiga file type mask */
|
rlm@1
|
250 const UInt32 kIFDIR = 04000; /* Amiga directory */
|
rlm@1
|
251 const UInt32 kIFREG = 02000; /* Amiga regular file */
|
rlm@1
|
252 const UInt32 kIHIDDEN = 00200; /* to be supported in AmigaDOS 3.x */
|
rlm@1
|
253 const UInt32 kISCRIPT = 00100; /* executable script (text command file) */
|
rlm@1
|
254 const UInt32 kIPURE = 00040; /* allow loading into resident memory */
|
rlm@1
|
255 const UInt32 kIARCHIVE = 00020; /* not modified since bit was last set */
|
rlm@1
|
256 const UInt32 kIREAD = 00010; /* can be opened for reading */
|
rlm@1
|
257 const UInt32 kIWRITE = 00004; /* can be opened for writing */
|
rlm@1
|
258 const UInt32 kIEXECUTE = 00002; /* executable image, a loadable runfile */
|
rlm@1
|
259 const UInt32 kIDELETE = 00001; /* can be deleted */
|
rlm@1
|
260 }
|
rlm@1
|
261 }
|
rlm@1
|
262
|
rlm@1
|
263 }}
|
rlm@1
|
264
|
rlm@1
|
265 #endif
|