Commit | Line | Data |
1a6a8453 |
1 | package Compress::Zip::Constants; |
2 | |
3 | use strict ; |
4 | use warnings; |
5 | |
6 | require Exporter; |
7 | |
8 | our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names); |
9 | |
10 | $VERSION = '1.00'; |
11 | |
12 | @ISA = qw(Exporter); |
13 | |
14 | @EXPORT= qw( |
15 | |
16 | ZIP_ID_SIZE |
17 | GZIP_ID1 |
18 | GZIP_ID2 |
19 | |
20 | GZIP_FLG_DEFAULT |
21 | GZIP_FLG_FTEXT |
22 | GZIP_FLG_FHCRC |
23 | GZIP_FLG_FEXTRA |
24 | GZIP_FLG_FNAME |
25 | GZIP_FLG_FCOMMENT |
26 | GZIP_FLG_RESERVED |
27 | |
28 | GZIP_CM_DEFLATED |
29 | |
30 | GZIP_MIN_HEADER_SIZE |
31 | GZIP_TRAILER_SIZE |
32 | |
33 | GZIP_MTIME_DEFAULT |
34 | GZIP_FEXTRA_DEFAULT |
35 | GZIP_FEXTRA_HEADER_SIZE |
36 | GZIP_FEXTRA_MAX_SIZE |
37 | GZIP_FEXTRA_SUBFIELD_HEADER_SIZE |
38 | GZIP_FEXTRA_SUBFIELD_ID_SIZE |
39 | GZIP_FEXTRA_SUBFIELD_LEN_SIZE |
40 | GZIP_FEXTRA_SUBFIELD_MAX_SIZE |
41 | |
42 | GZIP_FNAME_INVALID_CHAR_RE |
43 | GZIP_FCOMMENT_INVALID_CHAR_RE |
44 | |
45 | GZIP_FHCRC_SIZE |
46 | |
47 | GZIP_ISIZE_MAX |
48 | GZIP_ISIZE_MOD_VALUE |
49 | |
50 | |
51 | GZIP_NULL_BYTE |
52 | |
53 | GZIP_OS_DEFAULT |
54 | |
55 | %GZIP_OS_Names |
56 | |
57 | GZIP_MINIMUM_HEADER |
58 | |
59 | ); |
60 | |
61 | |
62 | # Constants for the Zip Local Header |
63 | |
64 | use constant ZIP_ID_SIZE => 4 ; |
65 | use constant ZIP_LOCAL_ID => 0x02014B50; |
66 | use constant ZIP_LOCAL_ID1 => 0x04; |
67 | use constant ZIP_LOCAL_ID2 => 0x03; |
68 | use constant ZIP_LOCAL_ID3 => 0x4B; |
69 | use constant ZIP_LOCAL_ID4 => 0x50; |
70 | |
71 | use constant ZIP_MIN_HEADER_SIZE => 30 ; |
72 | use constant ZIP_TRAILER_SIZE => 0 ; |
73 | |
74 | |
75 | use constant GZIP_FLG_DEFAULT => 0x00 ; |
76 | use constant GZIP_FLG_FTEXT => 0x01 ; |
77 | use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip |
78 | use constant GZIP_FLG_FEXTRA => 0x04 ; |
79 | use constant GZIP_FLG_FNAME => 0x08 ; |
80 | use constant GZIP_FLG_FCOMMENT => 0x10 ; |
81 | #use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources |
82 | use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ; |
83 | |
84 | use constant GZIP_MTIME_DEFAULT => 0x00 ; |
85 | use constant GZIP_FEXTRA_DEFAULT => 0x00 ; |
86 | use constant GZIP_FEXTRA_HEADER_SIZE => 2 ; |
87 | use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ; |
88 | use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => 4 ; |
89 | use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ; |
90 | use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ; |
91 | use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => 0xFFFF ; |
92 | |
93 | use constant GZIP_FNAME_INVALID_CHAR_RE => qr/[\x00-\x1F\x7F-\x9F]/; |
94 | use constant GZIP_FCOMMENT_INVALID_CHAR_RE => qr/[\x00-\x09\x11-\x1F\x7F-\x9F]/; |
95 | |
96 | use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip |
97 | |
98 | use constant GZIP_CM_DEFLATED => 8 ; |
99 | |
100 | use constant GZIP_NULL_BYTE => "\x00"; |
101 | use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ; |
102 | use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ; |
103 | |
104 | # OS Names sourced from http://www.gzip.org/format.txt |
105 | |
106 | use constant GZIP_OS_DEFAULT=> 0xFF ; |
107 | %ZIP_OS_Names = ( |
108 | 0 => 'MS-DOS', |
109 | 1 => 'Amiga', |
110 | 2 => 'VMS', |
111 | 3 => 'Unix', |
112 | 4 => 'VM/CMS', |
113 | 5 => 'Atari TOS', |
114 | 6 => 'HPFS (OS/2, NT)', |
115 | 7 => 'Macintosh', |
116 | 8 => 'Z-System', |
117 | 9 => 'CP/M', |
118 | 10 => 'TOPS-20', |
119 | 11 => 'NTFS (NT)', |
120 | 12 => 'SMS QDOS', |
121 | 13 => 'Acorn RISCOS', |
122 | 14 => 'VFAT file system (Win95, NT)', |
123 | 15 => 'MVS', |
124 | 16 => 'BeOS', |
125 | 17 => 'Tandem/NSK', |
126 | 18 => 'THEOS', |
127 | GZIP_OS_DEFAULT => 'Unknown', |
128 | ) ; |
129 | |
130 | use constant GZIP_MINIMUM_HEADER => pack("C4 V C C", |
131 | GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT, |
132 | GZIP_MTIME_DEFAULT, GZIP_FEXTRA_DEFAULT, GZIP_OS_DEFAULT) ; |
133 | |
134 | |
135 | 1; |