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 84     84   533 use strict ;
  84         161  
  84         2228  
4 84     84   377 use warnings;
  84         159  
  84         1710  
5 84     84   436 use bytes;
  84         157  
  84         388  
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.206';
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 84     84   10978 use constant GZIP_ID_SIZE => 2 ;
  84         193  
  84         5244  
66 84     84   505 use constant GZIP_ID1 => 0x1F;
  84         176  
  84         4281  
67 84     84   527 use constant GZIP_ID2 => 0x8B;
  84         186  
  84         3838  
68              
69 84     84   474 use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size
  84         190  
  84         3915  
70 84     84   534 use constant GZIP_TRAILER_SIZE => 8 ;
  84         166  
  84         4094  
71              
72              
73 84     84   489 use constant GZIP_FLG_DEFAULT => 0x00 ;
  84         157  
  84         3779  
74 84     84   504 use constant GZIP_FLG_FTEXT => 0x01 ;
  84         152  
  84         3798  
75 84     84   493 use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip
  84         178  
  84         4051  
76 84     84   540 use constant GZIP_FLG_FEXTRA => 0x04 ;
  84         162  
  84         3996  
77 84     84   499 use constant GZIP_FLG_FNAME => 0x08 ;
  84         164  
  84         4085  
78 84     84   502 use constant GZIP_FLG_FCOMMENT => 0x10 ;
  84         171  
  84         4432  
79             #use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources
80 84     84   496 use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ;
  84         177  
  84         4197  
81              
82 84     84   541 use constant GZIP_XFL_DEFAULT => 0x00 ;
  84         191  
  84         3933  
83              
84 84     84   507 use constant GZIP_MTIME_DEFAULT => 0x00 ;
  84         200  
  84         4002  
85              
86 84     84   509 use constant GZIP_FEXTRA_HEADER_SIZE => 2 ;
  84         164  
  84         3948  
87 84     84   487 use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ;
  84         157  
  84         4495  
88 84     84   2521 use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ;
  84         224  
  84         3905  
89 84     84   495 use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ;
  84         188  
  84         4122  
90 84         4235 use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE +
91 84     84   471 GZIP_FEXTRA_SUBFIELD_LEN_SIZE;
  84         159  
92 84         8756 use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE -
93 84     84   470 GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ;
  84         155  
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 84     84   600 use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip
  84         185  
  84         4150  
110              
111 84     84   483 use constant GZIP_CM_DEFLATED => 8 ;
  84         175  
  84         4568  
112              
113 84     84   512 use constant GZIP_NULL_BYTE => "\x00";
  84         147  
  84         4020  
114 84     84   536 use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ;
  84         177  
  84         4352  
115 84     84   547 use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ;
  84         165  
  84         4123  
116              
117             # OS Names sourced from http://www.gzip.org/format.txt
118              
119 84     84   536 use constant GZIP_OS_DEFAULT=> 0xFF ;
  84         154  
  84         9135  
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 84         5392 use constant GZIP_MINIMUM_HEADER => pack("C4 V C C",
144             GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT,
145 84     84   578 GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ;
  84         174  
146              
147              
148             1;