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   609 use strict ;
  84         178  
  84         2503  
4 84     84   423 use warnings;
  84         187  
  84         1948  
5 84     84   434 use bytes;
  84         174  
  84         429  
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.205';
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   12522 use constant GZIP_ID_SIZE => 2 ;
  84         257  
  84         5909  
66 84     84   603 use constant GZIP_ID1 => 0x1F;
  84         223  
  84         4445  
67 84     84   545 use constant GZIP_ID2 => 0x8B;
  84         250  
  84         4365  
68              
69 84     84   561 use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size
  84         234  
  84         4620  
70 84     84   582 use constant GZIP_TRAILER_SIZE => 8 ;
  84         184  
  84         4425  
71              
72              
73 84     84   634 use constant GZIP_FLG_DEFAULT => 0x00 ;
  84         194  
  84         4253  
74 84     84   557 use constant GZIP_FLG_FTEXT => 0x01 ;
  84         218  
  84         4283  
75 84     84   567 use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip
  84         234  
  84         4489  
76 84     84   587 use constant GZIP_FLG_FEXTRA => 0x04 ;
  84         196  
  84         4528  
77 84     84   560 use constant GZIP_FLG_FNAME => 0x08 ;
  84         226  
  84         4510  
78 84     84   574 use constant GZIP_FLG_FCOMMENT => 0x10 ;
  84         217  
  84         4826  
79             #use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources
80 84     84   536 use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ;
  84         202  
  84         5140  
81              
82 84     84   583 use constant GZIP_XFL_DEFAULT => 0x00 ;
  84         197  
  84         4180  
83              
84 84     84   572 use constant GZIP_MTIME_DEFAULT => 0x00 ;
  84         203  
  84         4378  
85              
86 84     84   562 use constant GZIP_FEXTRA_HEADER_SIZE => 2 ;
  84         243  
  84         4334  
87 84     84   549 use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ;
  84         194  
  84         4974  
88 84     84   579 use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ;
  84         209  
  84         6886  
89 84     84   625 use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ;
  84         182  
  84         4992  
90 84         4635 use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE +
91 84     84   542 GZIP_FEXTRA_SUBFIELD_LEN_SIZE;
  84         168  
92 84         10309 use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE -
93 84     84   507 GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ;
  84         193  
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   588 use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip
  84         183  
  84         4418  
110              
111 84     84   568 use constant GZIP_CM_DEFLATED => 8 ;
  84         198  
  84         4940  
112              
113 84     84   577 use constant GZIP_NULL_BYTE => "\x00";
  84         196  
  84         4420  
114 84     84   561 use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ;
  84         200  
  84         4832  
115 84     84   533 use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ;
  84         171  
  84         4776  
116              
117             # OS Names sourced from http://www.gzip.org/format.txt
118              
119 84     84   568 use constant GZIP_OS_DEFAULT=> 0xFF ;
  84         198  
  84         10909  
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         5939 use constant GZIP_MINIMUM_HEADER => pack("C4 V C C",
144             GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT,
145 84     84   627 GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ;
  84         192  
146              
147              
148             1;