File Coverage

blib/lib/IO/Compress/Gzip/Constants.pm
Criterion Covered Total %
statement 90 90 100.0
branch n/a
condition n/a
subroutine 30 30 100.0
pod n/a
total 120 120 100.0


line stmt bran cond sub pod time code
1             package IO::Compress::Gzip::Constants;
2              
3 125     125   850 use strict ;
  125         299  
  125         4633  
4 125     125   929 use warnings;
  125         356  
  125         5515  
5 125     125   768 use bytes;
  125         225  
  125         1026  
6              
7             require Exporter;
8              
9             our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names);
10             our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE);
11              
12             $VERSION = '2.220';
13              
14             @ISA = qw(Exporter);
15              
16             @EXPORT= qw(
17              
18             GZIP_ID_SIZE
19             GZIP_ID1
20             GZIP_ID2
21              
22             GZIP_FLG_DEFAULT
23             GZIP_FLG_FTEXT
24             GZIP_FLG_FHCRC
25             GZIP_FLG_FEXTRA
26             GZIP_FLG_FNAME
27             GZIP_FLG_FCOMMENT
28             GZIP_FLG_RESERVED
29              
30             GZIP_CM_DEFLATED
31              
32             GZIP_MIN_HEADER_SIZE
33             GZIP_TRAILER_SIZE
34              
35             GZIP_MTIME_DEFAULT
36             GZIP_XFL_DEFAULT
37             GZIP_FEXTRA_HEADER_SIZE
38             GZIP_FEXTRA_MAX_SIZE
39             GZIP_FEXTRA_SUBFIELD_HEADER_SIZE
40             GZIP_FEXTRA_SUBFIELD_ID_SIZE
41             GZIP_FEXTRA_SUBFIELD_LEN_SIZE
42             GZIP_FEXTRA_SUBFIELD_MAX_SIZE
43              
44             $GZIP_FNAME_INVALID_CHAR_RE
45             $GZIP_FCOMMENT_INVALID_CHAR_RE
46              
47             GZIP_FHCRC_SIZE
48              
49             GZIP_ISIZE_MAX
50             GZIP_ISIZE_MOD_VALUE
51              
52              
53             GZIP_NULL_BYTE
54              
55             GZIP_OS_DEFAULT
56              
57             %GZIP_OS_Names
58              
59             GZIP_MINIMUM_HEADER
60              
61             );
62              
63             # Constant names derived from RFC 1952
64              
65 125     125   22439 use constant GZIP_ID_SIZE => 2 ;
  125         437  
  125         10067  
66 125     125   793 use constant GZIP_ID1 => 0x1F;
  125         261  
  125         7097  
67 125     125   792 use constant GZIP_ID2 => 0x8B;
  125         605  
  125         6498  
68              
69 125     125   711 use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size
  125         258  
  125         6546  
70 125     125   670 use constant GZIP_TRAILER_SIZE => 8 ;
  125         427  
  125         6329  
71              
72              
73 125     125   706 use constant GZIP_FLG_DEFAULT => 0x00 ;
  125         251  
  125         6101  
74 125     125   631 use constant GZIP_FLG_FTEXT => 0x01 ;
  125         231  
  125         7599  
75 125     125   946 use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip
  125         570  
  125         6356  
76 125     125   925 use constant GZIP_FLG_FEXTRA => 0x04 ;
  125         491  
  125         6019  
77 125     125   739 use constant GZIP_FLG_FNAME => 0x08 ;
  125         234  
  125         5401  
78 125     125   733 use constant GZIP_FLG_FCOMMENT => 0x10 ;
  125         313  
  125         7421  
79             #use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources
80 125     125   661 use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ;
  125         330  
  125         6248  
81              
82 125     125   649 use constant GZIP_XFL_DEFAULT => 0x00 ;
  125         280  
  125         5858  
83              
84 125     125   768 use constant GZIP_MTIME_DEFAULT => 0x00 ;
  125         239  
  125         6169  
85              
86 125     125   733 use constant GZIP_FEXTRA_HEADER_SIZE => 2 ;
  125         309  
  125         6299  
87 125     125   700 use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ;
  125         227  
  125         5976  
88 125     125   618 use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ;
  125         247  
  125         6106  
89 125     125   631 use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ;
  125         257  
  125         7128  
90 125         7236 use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE +
91 125     125   673 GZIP_FEXTRA_SUBFIELD_LEN_SIZE;
  125         238  
92 125         15079 use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE -
93 125     125   716 GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ;
  125         280  
94              
95              
96             if (ord('A') == 193)
97             {
98             # EBCDIC
99             $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x3f\xff]';
100             $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x0a\x11-\x14\x16-\x3f\xff]';
101              
102             }
103             else
104             {
105             $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x1F\x7F-\x9F]';
106             $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x09\x11-\x1F\x7F-\x9F]';
107             }
108              
109 125     125   762 use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip
  125         233  
  125         6838  
110              
111 125     125   1026 use constant GZIP_CM_DEFLATED => 8 ;
  125         283  
  125         7616  
112              
113 125     125   670 use constant GZIP_NULL_BYTE => "\x00";
  125         273  
  125         6705  
114 125     125   670 use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ;
  125         266  
  125         6956  
115 125     125   679 use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ;
  125         284  
  125         5960  
116              
117             # OS Names sourced from http://www.gzip.org/format.txt
118              
119 125     125   635 use constant GZIP_OS_DEFAULT=> 0xFF ;
  125         247  
  125         15402  
120             %GZIP_OS_Names = (
121             0 => 'MS-DOS',
122             1 => 'Amiga',
123             2 => 'VMS',
124             3 => 'Unix',
125             4 => 'VM/CMS',
126             5 => 'Atari TOS',
127             6 => 'HPFS (OS/2, NT)',
128             7 => 'Macintosh',
129             8 => 'Z-System',
130             9 => 'CP/M',
131             10 => 'TOPS-20',
132             11 => 'NTFS (NT)',
133             12 => 'SMS QDOS',
134             13 => 'Acorn RISCOS',
135             14 => 'VFAT file system (Win95, NT)',
136             15 => 'MVS',
137             16 => 'BeOS',
138             17 => 'Tandem/NSK',
139             18 => 'THEOS',
140             GZIP_OS_DEFAULT() => 'Unknown',
141             ) ;
142              
143 125         9349 use constant GZIP_MINIMUM_HEADER => pack("C4 V C C",
144             GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT,
145 125     125   935 GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ;
  125         226  
146              
147              
148             1;