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   721 use strict ;
  125         281  
  125         3643  
4 125     125   744 use warnings;
  125         302  
  125         4385  
5 125     125   517 use bytes;
  125         172  
  125         784  
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.221';
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   16851 use constant GZIP_ID_SIZE => 2 ;
  125         403  
  125         7413  
66 125     125   523 use constant GZIP_ID1 => 0x1F;
  125         180  
  125         4928  
67 125     125   458 use constant GZIP_ID2 => 0x8B;
  125         267  
  125         4668  
68              
69 125     125   709 use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size
  125         199  
  125         4526  
70 125     125   475 use constant GZIP_TRAILER_SIZE => 8 ;
  125         462  
  125         4659  
71              
72              
73 125     125   625 use constant GZIP_FLG_DEFAULT => 0x00 ;
  125         222  
  125         4711  
74 125     125   526 use constant GZIP_FLG_FTEXT => 0x01 ;
  125         326  
  125         4567  
75 125     125   695 use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip
  125         600  
  125         4648  
76 125     125   612 use constant GZIP_FLG_FEXTRA => 0x04 ;
  125         289  
  125         4038  
77 125     125   443 use constant GZIP_FLG_FNAME => 0x08 ;
  125         242  
  125         3929  
78 125     125   510 use constant GZIP_FLG_FCOMMENT => 0x10 ;
  125         340  
  125         5143  
79             #use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources
80 125     125   559 use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ;
  125         185  
  125         4423  
81              
82 125     125   493 use constant GZIP_XFL_DEFAULT => 0x00 ;
  125         223  
  125         4278  
83              
84 125     125   452 use constant GZIP_MTIME_DEFAULT => 0x00 ;
  125         169  
  125         3965  
85              
86 125     125   443 use constant GZIP_FEXTRA_HEADER_SIZE => 2 ;
  125         188  
  125         4424  
87 125     125   460 use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ;
  125         190  
  125         4057  
88 125     125   507 use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ;
  125         206  
  125         4229  
89 125     125   467 use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ;
  125         158  
  125         5142  
90 125         5288 use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE +
91 125     125   445 GZIP_FEXTRA_SUBFIELD_LEN_SIZE;
  125         173  
92 125         11527 use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE -
93 125     125   522 GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ;
  125         201  
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   566 use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip
  125         190  
  125         4816  
110              
111 125     125   531 use constant GZIP_CM_DEFLATED => 8 ;
  125         202  
  125         5469  
112              
113 125     125   548 use constant GZIP_NULL_BYTE => "\x00";
  125         198  
  125         4742  
114 125     125   548 use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ;
  125         202  
  125         4951  
115 125     125   470 use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ;
  125         167  
  125         4367  
116              
117             # OS Names sourced from http://www.gzip.org/format.txt
118              
119 125     125   439 use constant GZIP_OS_DEFAULT=> 0xFF ;
  125         229  
  125         11667  
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         7358 use constant GZIP_MINIMUM_HEADER => pack("C4 V C C",
144             GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT,
145 125     125   593 GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ;
  125         193  
146              
147              
148             1;