36 #define LOCSIG 0x04034b50L /* "PK\003\004" */ |
36 #define LOCSIG 0x04034b50L /* "PK\003\004" */ |
37 #define EXTSIG 0x08074b50L /* "PK\007\008" */ |
37 #define EXTSIG 0x08074b50L /* "PK\007\008" */ |
38 #define CENSIG 0x02014b50L /* "PK\001\002" */ |
38 #define CENSIG 0x02014b50L /* "PK\001\002" */ |
39 #define ENDSIG 0x06054b50L /* "PK\005\006" */ |
39 #define ENDSIG 0x06054b50L /* "PK\005\006" */ |
40 |
40 |
|
41 #define ZIP64_ENDSIG 0x06064b50L /* "PK\006\006" */ |
|
42 #define ZIP64_LOCSIG 0x07064b50L /* "PK\006\007" */ |
|
43 |
41 /* |
44 /* |
42 * Header sizes including signatures |
45 * Header sizes including signatures |
43 */ |
46 */ |
|
47 |
44 #ifdef USE_MMAP |
48 #ifdef USE_MMAP |
45 #define SIGSIZ 4 |
49 #define SIGSIZ 4 |
46 #endif |
50 #endif |
47 #define LOCHDR 30 |
51 #define LOCHDR 30 |
48 #define EXTHDR 16 |
52 #define EXTHDR 16 |
49 #define CENHDR 46 |
53 #define CENHDR 46 |
50 #define ENDHDR 22 |
54 #define ENDHDR 22 |
51 |
55 |
|
56 #define ZIP64_ENDHDR 56 // ZIP64 end header size |
|
57 #define ZIP64_LOCHDR 20 // ZIP64 end loc header size |
|
58 #define ZIP64_EXTHDR 24 // EXT header size |
|
59 #define ZIP64_EXTID 1 // Extra field Zip64 header ID |
|
60 |
|
61 #define ZIP64_MAGICVAL 0xffffffffLL |
|
62 #define ZIP64_MAGICCOUNT 0xffff |
|
63 |
|
64 |
52 /* |
65 /* |
53 * Header field access macros |
66 * Header field access macros |
54 */ |
67 */ |
55 #define CH(b, n) (((unsigned char *)(b))[n]) |
68 #define CH(b, n) (((unsigned char *)(b))[n]) |
56 #define SH(b, n) (CH(b, n) | (CH(b, n+1) << 8)) |
69 #define SH(b, n) (CH(b, n) | (CH(b, n+1) << 8)) |
57 #define LG(b, n) (SH(b, n) | (SH(b, n+2) << 16)) |
70 #define LG(b, n) ((SH(b, n) | (SH(b, n+2) << 16)) &0xffffffffUL) |
|
71 #define LL(b, n) (((jlong)LG(b, n)) | (((jlong)LG(b, n+4)) << 32)) |
58 #define GETSIG(b) LG(b, 0) |
72 #define GETSIG(b) LG(b, 0) |
59 |
73 |
60 /* |
74 /* |
61 * Macros for getting local file (LOC) header fields |
75 * Macros for getting local file (LOC) header fields |
62 */ |
76 */ |
104 #define ENDSIZ(b) LG(b, 12) /* central directory size */ |
118 #define ENDSIZ(b) LG(b, 12) /* central directory size */ |
105 #define ENDOFF(b) LG(b, 16) /* central directory offset */ |
119 #define ENDOFF(b) LG(b, 16) /* central directory offset */ |
106 #define ENDCOM(b) SH(b, 20) /* size of zip file comment */ |
120 #define ENDCOM(b) SH(b, 20) /* size of zip file comment */ |
107 |
121 |
108 /* |
122 /* |
|
123 * Macros for getting Zip64 end of central directory header fields |
|
124 */ |
|
125 #define ZIP64_ENDLEN(b) LL(b, 4) /* size of zip64 end of central dir */ |
|
126 #define ZIP64_ENDVEM(b) SH(b, 12) /* version made by */ |
|
127 #define ZIP64_ENDVER(b) SH(b, 14) /* version needed to extract */ |
|
128 #define ZIP64_ENDNMD(b) LG(b, 16) /* number of this disk */ |
|
129 #define ZIP64_ENDDSK(b) LG(b, 20) /* disk number of start */ |
|
130 #define ZIP64_ENDTOD(b) LL(b, 24) /* total number of entries on this disk */ |
|
131 #define ZIP64_ENDTOT(b) LL(b, 32) /* total number of entries */ |
|
132 #define ZIP64_ENDSIZ(b) LL(b, 40) /* central directory size in bytes */ |
|
133 #define ZIP64_ENDOFF(b) LL(b, 48) /* offset of first CEN header */ |
|
134 |
|
135 /* |
|
136 * Macros for getting Zip64 end of central directory locator fields |
|
137 */ |
|
138 #define ZIP64_LOCDSK(b) LG(b, 4) /* disk number start */ |
|
139 #define ZIP64_LOCOFF(b) LL(b, 8) /* offset of zip64 end */ |
|
140 #define ZIP64_LOCTOT(b) LG(b, 16) /* total number of disks */ |
|
141 |
|
142 /* |
109 * Supported compression methods |
143 * Supported compression methods |
110 */ |
144 */ |
111 #define STORED 0 |
145 #define STORED 0 |
112 #define DEFLATED 8 |
146 #define DEFLATED 8 |
113 |
147 |
143 * Note that in order to save space we don't keep the name in memory, |
177 * Note that in order to save space we don't keep the name in memory, |
144 * but merely remember a 32 bit hash. |
178 * but merely remember a 32 bit hash. |
145 */ |
179 */ |
146 typedef struct jzcell { |
180 typedef struct jzcell { |
147 unsigned int hash; /* 32 bit hashcode on name */ |
181 unsigned int hash; /* 32 bit hashcode on name */ |
148 unsigned int cenpos; /* Offset of central directory file header */ |
182 jlong cenpos; /* Offset of central directory file header */ |
149 unsigned int next; /* hash chain: index into jzfile->entries */ |
183 unsigned int next; /* hash chain: index into jzfile->entries */ |
150 } jzcell; |
184 } jzcell; |
151 |
185 |
152 typedef struct cencache { |
186 typedef struct cencache { |
153 char *data; /* A cached page of CEN headers */ |
187 char *data; /* A cached page of CEN headers */ |