Spaces:
Sleeping
Sleeping
package IO::Compress::Gzip::Constants; | |
use strict ; | |
use warnings; | |
use bytes; | |
require Exporter; | |
our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names); | |
our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE); | |
$VERSION = '2.102'; | |
@ISA = qw(Exporter); | |
@EXPORT= qw( | |
GZIP_ID_SIZE | |
GZIP_ID1 | |
GZIP_ID2 | |
GZIP_FLG_DEFAULT | |
GZIP_FLG_FTEXT | |
GZIP_FLG_FHCRC | |
GZIP_FLG_FEXTRA | |
GZIP_FLG_FNAME | |
GZIP_FLG_FCOMMENT | |
GZIP_FLG_RESERVED | |
GZIP_CM_DEFLATED | |
GZIP_MIN_HEADER_SIZE | |
GZIP_TRAILER_SIZE | |
GZIP_MTIME_DEFAULT | |
GZIP_XFL_DEFAULT | |
GZIP_FEXTRA_HEADER_SIZE | |
GZIP_FEXTRA_MAX_SIZE | |
GZIP_FEXTRA_SUBFIELD_HEADER_SIZE | |
GZIP_FEXTRA_SUBFIELD_ID_SIZE | |
GZIP_FEXTRA_SUBFIELD_LEN_SIZE | |
GZIP_FEXTRA_SUBFIELD_MAX_SIZE | |
$GZIP_FNAME_INVALID_CHAR_RE | |
$GZIP_FCOMMENT_INVALID_CHAR_RE | |
GZIP_FHCRC_SIZE | |
GZIP_ISIZE_MAX | |
GZIP_ISIZE_MOD_VALUE | |
GZIP_NULL_BYTE | |
GZIP_OS_DEFAULT | |
%GZIP_OS_Names | |
GZIP_MINIMUM_HEADER | |
); | |
# Constant names derived from RFC 1952 | |
use constant GZIP_ID_SIZE => 2 ; | |
use constant GZIP_ID1 => 0x1F; | |
use constant GZIP_ID2 => 0x8B; | |
use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size | |
use constant GZIP_TRAILER_SIZE => 8 ; | |
use constant GZIP_FLG_DEFAULT => 0x00 ; | |
use constant GZIP_FLG_FTEXT => 0x01 ; | |
use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip | |
use constant GZIP_FLG_FEXTRA => 0x04 ; | |
use constant GZIP_FLG_FNAME => 0x08 ; | |
use constant GZIP_FLG_FCOMMENT => 0x10 ; | |
#use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources | |
use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ; | |
use constant GZIP_XFL_DEFAULT => 0x00 ; | |
use constant GZIP_MTIME_DEFAULT => 0x00 ; | |
use constant GZIP_FEXTRA_HEADER_SIZE => 2 ; | |
use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ; | |
use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ; | |
use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ; | |
use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE + | |
GZIP_FEXTRA_SUBFIELD_LEN_SIZE; | |
use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE - | |
GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ; | |
if (ord('A') == 193) | |
{ | |
# EBCDIC | |
$GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x3f\xff]'; | |
$GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x0a\x11-\x14\x16-\x3f\xff]'; | |
} | |
else | |
{ | |
$GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x1F\x7F-\x9F]'; | |
$GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x09\x11-\x1F\x7F-\x9F]'; | |
} | |
use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip | |
use constant GZIP_CM_DEFLATED => 8 ; | |
use constant GZIP_NULL_BYTE => "\x00"; | |
use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ; | |
use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ; | |
# OS Names sourced from http://www.gzip.org/format.txt | |
use constant GZIP_OS_DEFAULT=> 0xFF ; | |
%GZIP_OS_Names = ( | |
0 => 'MS-DOS', | |
1 => 'Amiga', | |
2 => 'VMS', | |
3 => 'Unix', | |
4 => 'VM/CMS', | |
5 => 'Atari TOS', | |
6 => 'HPFS (OS/2, NT)', | |
7 => 'Macintosh', | |
8 => 'Z-System', | |
9 => 'CP/M', | |
10 => 'TOPS-20', | |
11 => 'NTFS (NT)', | |
12 => 'SMS QDOS', | |
13 => 'Acorn RISCOS', | |
14 => 'VFAT file system (Win95, NT)', | |
15 => 'MVS', | |
16 => 'BeOS', | |
17 => 'Tandem/NSK', | |
18 => 'THEOS', | |
GZIP_OS_DEFAULT() => 'Unknown', | |
) ; | |
use constant GZIP_MINIMUM_HEADER => pack("C4 V C C", | |
GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT, | |
GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ; | |
1; | |