1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 #ifndef _zipstruct_h
7 #define _zipstruct_h
8 
9 /*
10  *  Certain constants and structures for
11  *  the Phil Katz ZIP archive format.
12  *
13  */
14 
15 typedef struct ZipLocal_ {
16   unsigned char signature[4];
17   unsigned char word[2];
18   unsigned char bitflag[2];
19   unsigned char method[2];
20   unsigned char time[2];
21   unsigned char date[2];
22   unsigned char crc32[4];
23   unsigned char size[4];
24   unsigned char orglen[4];
25   unsigned char filename_len[2];
26   unsigned char extrafield_len[2];
27 } ZipLocal;
28 
29 /*
30  * 'sizeof(struct XXX)' includes padding on ARM (see bug 87965)
31  * As the internals of a jar/zip file must not depend on the target
32  * architecture (i386, ppc, ARM, ...), use a fixed value instead.
33  */
34 #define ZIPLOCAL_SIZE (4 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 2)
35 
36 typedef struct ZipCentral_ {
37   unsigned char signature[4];
38   unsigned char version_made_by[2];
39   unsigned char version[2];
40   unsigned char bitflag[2];
41   unsigned char method[2];
42   unsigned char time[2];
43   unsigned char date[2];
44   unsigned char crc32[4];
45   unsigned char size[4];
46   unsigned char orglen[4];
47   unsigned char filename_len[2];
48   unsigned char extrafield_len[2];
49   unsigned char commentfield_len[2];
50   unsigned char diskstart_number[2];
51   unsigned char internal_attributes[2];
52   unsigned char external_attributes[4];
53   unsigned char localhdr_offset[4];
54 } ZipCentral;
55 
56 /*
57  * 'sizeof(struct XXX)' includes padding on ARM (see bug 87965)
58  * As the internals of a jar/zip file must not depend on the target
59  * architecture (i386, ppc, ARM, ...), use a fixed value instead.
60  */
61 #define ZIPCENTRAL_SIZE \
62   (4 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 2 + 2 + 2 + 2 + 4 + 4)
63 
64 typedef struct ZipEnd_ {
65   unsigned char signature[4];
66   unsigned char disk_nr[2];
67   unsigned char start_central_dir[2];
68   unsigned char total_entries_disk[2];
69   unsigned char total_entries_archive[2];
70   unsigned char central_dir_size[4];
71   unsigned char offset_central_dir[4];
72   unsigned char commentfield_len[2];
73 } ZipEnd;
74 
75 /*
76  * 'sizeof(struct XXX)' includes padding on ARM (see bug 87965)
77  * As the internals of a jar/zip file must not depend on the target
78  * architecture (i386, ppc, ARM, ...), use a fixed value instead.
79  */
80 #define ZIPEND_SIZE (4 + 2 + 2 + 2 + 2 + 4 + 4 + 2)
81 
82 /* signatures */
83 #define LOCALSIG 0x04034B50l
84 #define CENTRALSIG 0x02014B50l
85 #define ENDSIG 0x06054B50l
86 
87 /* extra fields */
88 #define EXTENDED_TIMESTAMP_FIELD 0x5455
89 #define EXTENDED_TIMESTAMP_MODTIME 0x01
90 
91 /* compression methods */
92 #define STORED 0
93 #define SHRUNK 1
94 #define REDUCED1 2
95 #define REDUCED2 3
96 #define REDUCED3 4
97 #define REDUCED4 5
98 #define IMPLODED 6
99 #define TOKENIZED 7
100 #define DEFLATED 8
101 #define UNSUPPORTED 0xFF
102 
103 #endif /* _zipstruct_h */
104