This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
51ba7117510c92a9093329eaa022d6dacce4b3d1
[perl5.git] / ext / IO-Compress / lib / IO / Compress / Gzip.pm
1
2 package IO::Compress::Gzip ;
3
4 require 5.004 ;
5
6 use strict ;
7 use warnings;
8 use bytes;
9
10
11 use IO::Compress::RawDeflate 2.019 ;
12
13 use Compress::Raw::Zlib  2.019 ;
14 use IO::Compress::Base::Common  2.019 qw(:Status :Parse createSelfTiedObject);
15 use IO::Compress::Gzip::Constants 2.019 ;
16 use IO::Compress::Zlib::Extra 2.019 ;
17
18 BEGIN
19 {
20     if (defined &utf8::downgrade ) 
21       { *noUTF8 = \&utf8::downgrade }
22     else
23       { *noUTF8 = sub {} }  
24 }
25
26 require Exporter ;
27
28 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GzipError);
29
30 $VERSION = '2.019';
31 $GzipError = '' ;
32
33 @ISA    = qw(Exporter IO::Compress::RawDeflate);
34 @EXPORT_OK = qw( $GzipError gzip ) ;
35 %EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;
36 push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
37 Exporter::export_ok_tags('all');
38
39 sub new
40 {
41     my $class = shift ;
42
43     my $obj = createSelfTiedObject($class, \$GzipError);
44
45     $obj->_create(undef, @_);
46 }
47
48
49 sub gzip
50 {
51     my $obj = createSelfTiedObject(undef, \$GzipError);
52     return $obj->_def(@_);
53 }
54
55 #sub newHeader
56 #{
57 #    my $self = shift ;
58 #    #return GZIP_MINIMUM_HEADER ;
59 #    return $self->mkHeader(*$self->{Got});
60 #}
61
62 sub getExtraParams
63 {
64     my $self = shift ;
65
66     return (
67             # zlib behaviour
68             $self->getZlibParams(),
69
70             # Gzip header fields
71             'Minimal'   => [0, 1, Parse_boolean,   0],
72             'Comment'   => [0, 1, Parse_any,       undef],
73             'Name'      => [0, 1, Parse_any,       undef],
74             'Time'      => [0, 1, Parse_any,       undef],
75             'TextFlag'  => [0, 1, Parse_boolean,   0],
76             'HeaderCRC' => [0, 1, Parse_boolean,   0],
77             'OS_Code'   => [0, 1, Parse_unsigned,  $Compress::Raw::Zlib::gzip_os_code],
78             'ExtraField'=> [0, 1, Parse_any,       undef],
79             'ExtraFlags'=> [0, 1, Parse_any,       undef],
80
81         );
82 }
83
84
85 sub ckParams
86 {
87     my $self = shift ;
88     my $got = shift ;
89
90     # gzip always needs crc32
91     $got->value('CRC32' => 1);
92
93     return 1
94         if $got->value('Merge') ;
95
96     my $strict = $got->value('Strict') ;
97
98
99     {
100         if (! $got->parsed('Time') ) {
101             # Modification time defaults to now.
102             $got->value('Time' => time) ;
103         }
104
105         # Check that the Name & Comment don't have embedded NULLs
106         # Also check that they only contain ISO 8859-1 chars.
107         if ($got->parsed('Name') && defined $got->value('Name')) {
108             my $name = $got->value('Name');
109                 
110             return $self->saveErrorString(undef, "Null Character found in Name",
111                                                 Z_DATA_ERROR)
112                 if $strict && $name =~ /\x00/ ;
113
114             return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Name",
115                                                 Z_DATA_ERROR)
116                 if $strict && $name =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ;
117         }
118
119         if ($got->parsed('Comment') && defined $got->value('Comment')) {
120             my $comment = $got->value('Comment');
121
122             return $self->saveErrorString(undef, "Null Character found in Comment",
123                                                 Z_DATA_ERROR)
124                 if $strict && $comment =~ /\x00/ ;
125
126             return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Comment",
127                                                 Z_DATA_ERROR)
128                 if $strict && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o;
129         }
130
131         if ($got->parsed('OS_Code') ) {
132             my $value = $got->value('OS_Code');
133
134             return $self->saveErrorString(undef, "OS_Code must be between 0 and 255, got '$value'")
135                 if $value < 0 || $value > 255 ;
136             
137         }
138
139         # gzip only supports Deflate at present
140         $got->value('Method' => Z_DEFLATED) ;
141
142         if ( ! $got->parsed('ExtraFlags')) {
143             $got->value('ExtraFlags' => 2) 
144                 if $got->value('Level') == Z_BEST_SPEED ;
145             $got->value('ExtraFlags' => 4) 
146                 if $got->value('Level') == Z_BEST_COMPRESSION ;
147         }
148
149         my $data = $got->value('ExtraField') ;
150         if (defined $data) {
151             my $bad = IO::Compress::Zlib::Extra::parseExtraField($data, $strict, 1) ;
152             return $self->saveErrorString(undef, "Error with ExtraField Parameter: $bad", Z_DATA_ERROR)
153                 if $bad ;
154
155             $got->value('ExtraField', $data) ;
156         }
157     }
158
159     return 1;
160 }
161
162 sub mkTrailer
163 {
164     my $self = shift ;
165     return pack("V V", *$self->{Compress}->crc32(), 
166                        *$self->{UnCompSize}->get32bit());
167 }
168
169 sub getInverseClass
170 {
171     return ('IO::Uncompress::Gunzip',
172                 \$IO::Uncompress::Gunzip::GunzipError);
173 }
174
175 sub getFileInfo
176 {
177     my $self = shift ;
178     my $params = shift;
179     my $filename = shift ;
180
181     my $defaultTime = (stat($filename))[9] ;
182
183     $params->value('Name' => $filename)
184         if ! $params->parsed('Name') ;
185
186     $params->value('Time' => $defaultTime) 
187         if ! $params->parsed('Time') ;
188 }
189
190
191 sub mkHeader
192 {
193     my $self = shift ;
194     my $param = shift ;
195
196     # stort-circuit if a minimal header is requested.
197     return GZIP_MINIMUM_HEADER if $param->value('Minimal') ;
198
199     # METHOD
200     my $method = $param->valueOrDefault('Method', GZIP_CM_DEFLATED) ;
201
202     # FLAGS
203     my $flags       = GZIP_FLG_DEFAULT ;
204     $flags |= GZIP_FLG_FTEXT    if $param->value('TextFlag') ;
205     $flags |= GZIP_FLG_FHCRC    if $param->value('HeaderCRC') ;
206     $flags |= GZIP_FLG_FEXTRA   if $param->wantValue('ExtraField') ;
207     $flags |= GZIP_FLG_FNAME    if $param->wantValue('Name') ;
208     $flags |= GZIP_FLG_FCOMMENT if $param->wantValue('Comment') ;
209     
210     # MTIME
211     my $time = $param->valueOrDefault('Time', GZIP_MTIME_DEFAULT) ;
212
213     # EXTRA FLAGS
214     my $extra_flags = $param->valueOrDefault('ExtraFlags', GZIP_XFL_DEFAULT);
215
216     # OS CODE
217     my $os_code = $param->valueOrDefault('OS_Code', GZIP_OS_DEFAULT) ;
218
219
220     my $out = pack("C4 V C C", 
221             GZIP_ID1,   # ID1
222             GZIP_ID2,   # ID2
223             $method,    # Compression Method
224             $flags,     # Flags
225             $time,      # Modification Time
226             $extra_flags, # Extra Flags
227             $os_code,   # Operating System Code
228             ) ;
229
230     # EXTRA
231     if ($flags & GZIP_FLG_FEXTRA) {
232         my $extra = $param->value('ExtraField') ;
233         $out .= pack("v", length $extra) . $extra ;
234     }
235
236     # NAME
237     if ($flags & GZIP_FLG_FNAME) {
238         my $name .= $param->value('Name') ;
239         $name =~ s/\x00.*$//;
240         $out .= $name ;
241         # Terminate the filename with NULL unless it already is
242         $out .= GZIP_NULL_BYTE 
243             if !length $name or
244                substr($name, 1, -1) ne GZIP_NULL_BYTE ;
245     }
246
247     # COMMENT
248     if ($flags & GZIP_FLG_FCOMMENT) {
249         my $comment .= $param->value('Comment') ;
250         $comment =~ s/\x00.*$//;
251         $out .= $comment ;
252         # Terminate the comment with NULL unless it already is
253         $out .= GZIP_NULL_BYTE
254             if ! length $comment or
255                substr($comment, 1, -1) ne GZIP_NULL_BYTE;
256     }
257
258     # HEADER CRC
259     $out .= pack("v", crc32($out) & 0x00FF ) if $param->value('HeaderCRC') ;
260
261     noUTF8($out);
262
263     return $out ;
264 }
265
266 sub mkFinalTrailer
267 {
268     return '';
269 }
270
271 1; 
272
273 __END__
274
275 =head1 NAME
276
277 IO::Compress::Gzip - Write RFC 1952 files/buffers
278  
279  
280
281 =head1 SYNOPSIS
282
283     use IO::Compress::Gzip qw(gzip $GzipError) ;
284
285     my $status = gzip $input => $output [,OPTS] 
286         or die "gzip failed: $GzipError\n";
287
288     my $z = new IO::Compress::Gzip $output [,OPTS]
289         or die "gzip failed: $GzipError\n";
290
291     $z->print($string);
292     $z->printf($format, $string);
293     $z->write($string);
294     $z->syswrite($string [, $length, $offset]);
295     $z->flush();
296     $z->tell();
297     $z->eof();
298     $z->seek($position, $whence);
299     $z->binmode();
300     $z->fileno();
301     $z->opened();
302     $z->autoflush();
303     $z->input_line_number();
304     $z->newStream( [OPTS] );
305     
306     $z->deflateParams();
307     
308     $z->close() ;
309
310     $GzipError ;
311
312     # IO::File mode
313
314     print $z $string;
315     printf $z $format, $string;
316     tell $z
317     eof $z
318     seek $z, $position, $whence
319     binmode $z
320     fileno $z
321     close $z ;
322     
323
324 =head1 DESCRIPTION
325
326 This module provides a Perl interface that allows writing compressed
327 data to files or buffer as defined in RFC 1952.
328
329 All the gzip headers defined in RFC 1952 can be created using
330 this module.
331
332 For reading RFC 1952 files/buffers, see the companion module 
333 L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
334
335 =head1 Functional Interface
336
337 A top-level function, C<gzip>, is provided to carry out
338 "one-shot" compression between buffers and/or files. For finer
339 control over the compression process, see the L</"OO Interface">
340 section.
341
342     use IO::Compress::Gzip qw(gzip $GzipError) ;
343
344     gzip $input => $output [,OPTS] 
345         or die "gzip failed: $GzipError\n";
346
347 The functional interface needs Perl5.005 or better.
348
349 =head2 gzip $input => $output [, OPTS]
350
351 C<gzip> expects at least two parameters, C<$input> and C<$output>.
352
353 =head3 The C<$input> parameter
354
355 The parameter, C<$input>, is used to define the source of
356 the uncompressed data. 
357
358 It can take one of the following forms:
359
360 =over 5
361
362 =item A filename
363
364 If the C<$input> parameter is a simple scalar, it is assumed to be a
365 filename. This file will be opened for reading and the input data
366 will be read from it.
367
368 =item A filehandle
369
370 If the C<$input> parameter is a filehandle, the input data will be
371 read from it.
372 The string '-' can be used as an alias for standard input.
373
374 =item A scalar reference 
375
376 If C<$input> is a scalar reference, the input data will be read
377 from C<$$input>.
378
379 =item An array reference 
380
381 If C<$input> is an array reference, each element in the array must be a
382 filename.
383
384 The input data will be read from each file in turn. 
385
386 The complete array will be walked to ensure that it only
387 contains valid filenames before any data is compressed.
388
389 =item An Input FileGlob string
390
391 If C<$input> is a string that is delimited by the characters "<" and ">"
392 C<gzip> will assume that it is an I<input fileglob string>. The
393 input is the list of files that match the fileglob.
394
395 If the fileglob does not match any files ...
396
397 See L<File::GlobMapper|File::GlobMapper> for more details.
398
399 =back
400
401 If the C<$input> parameter is any other type, C<undef> will be returned.
402
403 In addition, if C<$input> is a simple filename, the default values for
404 the C<Name> and C<Time> options will be sourced from that file.
405
406 If you do not want to use these defaults they can be overridden by
407 explicitly setting the C<Name> and C<Time> options or by setting the
408 C<Minimal> parameter.
409
410 =head3 The C<$output> parameter
411
412 The parameter C<$output> is used to control the destination of the
413 compressed data. This parameter can take one of these forms.
414
415 =over 5
416
417 =item A filename
418
419 If the C<$output> parameter is a simple scalar, it is assumed to be a
420 filename.  This file will be opened for writing and the compressed
421 data will be written to it.
422
423 =item A filehandle
424
425 If the C<$output> parameter is a filehandle, the compressed data
426 will be written to it.
427 The string '-' can be used as an alias for standard output.
428
429 =item A scalar reference 
430
431 If C<$output> is a scalar reference, the compressed data will be
432 stored in C<$$output>.
433
434 =item An Array Reference
435
436 If C<$output> is an array reference, the compressed data will be
437 pushed onto the array.
438
439 =item An Output FileGlob
440
441 If C<$output> is a string that is delimited by the characters "<" and ">"
442 C<gzip> will assume that it is an I<output fileglob string>. The
443 output is the list of files that match the fileglob.
444
445 When C<$output> is an fileglob string, C<$input> must also be a fileglob
446 string. Anything else is an error.
447
448 =back
449
450 If the C<$output> parameter is any other type, C<undef> will be returned.
451
452 =head2 Notes
453
454 When C<$input> maps to multiple files/buffers and C<$output> is a single
455 file/buffer the input files/buffers will be stored
456 in C<$output> as a concatenated series of compressed data streams.
457
458 =head2 Optional Parameters
459
460 Unless specified below, the optional parameters for C<gzip>,
461 C<OPTS>, are the same as those used with the OO interface defined in the
462 L</"Constructor Options"> section below.
463
464 =over 5
465
466 =item C<< AutoClose => 0|1 >>
467
468 This option applies to any input or output data streams to 
469 C<gzip> that are filehandles.
470
471 If C<AutoClose> is specified, and the value is true, it will result in all
472 input and/or output filehandles being closed once C<gzip> has
473 completed.
474
475 This parameter defaults to 0.
476
477 =item C<< BinModeIn => 0|1 >>
478
479 When reading from a file or filehandle, set C<binmode> before reading.
480
481 Defaults to 0.
482
483 =item C<< Append => 0|1 >>
484
485 TODO
486
487 =back
488
489 =head2 Examples
490
491 To read the contents of the file C<file1.txt> and write the compressed
492 data to the file C<file1.txt.gz>.
493
494     use strict ;
495     use warnings ;
496     use IO::Compress::Gzip qw(gzip $GzipError) ;
497
498     my $input = "file1.txt";
499     gzip $input => "$input.gz"
500         or die "gzip failed: $GzipError\n";
501
502 To read from an existing Perl filehandle, C<$input>, and write the
503 compressed data to a buffer, C<$buffer>.
504
505     use strict ;
506     use warnings ;
507     use IO::Compress::Gzip qw(gzip $GzipError) ;
508     use IO::File ;
509
510     my $input = new IO::File "<file1.txt"
511         or die "Cannot open 'file1.txt': $!\n" ;
512     my $buffer ;
513     gzip $input => \$buffer 
514         or die "gzip failed: $GzipError\n";
515
516 To compress all files in the directory "/my/home" that match "*.txt"
517 and store the compressed data in the same directory
518
519     use strict ;
520     use warnings ;
521     use IO::Compress::Gzip qw(gzip $GzipError) ;
522
523     gzip '</my/home/*.txt>' => '<*.gz>'
524         or die "gzip failed: $GzipError\n";
525
526 and if you want to compress each file one at a time, this will do the trick
527
528     use strict ;
529     use warnings ;
530     use IO::Compress::Gzip qw(gzip $GzipError) ;
531
532     for my $input ( glob "/my/home/*.txt" )
533     {
534         my $output = "$input.gz" ;
535         gzip $input => $output 
536             or die "Error compressing '$input': $GzipError\n";
537     }
538
539 =head1 OO Interface
540
541 =head2 Constructor
542
543 The format of the constructor for C<IO::Compress::Gzip> is shown below
544
545     my $z = new IO::Compress::Gzip $output [,OPTS]
546         or die "IO::Compress::Gzip failed: $GzipError\n";
547
548 It returns an C<IO::Compress::Gzip> object on success and undef on failure. 
549 The variable C<$GzipError> will contain an error message on failure.
550
551 If you are running Perl 5.005 or better the object, C<$z>, returned from 
552 IO::Compress::Gzip can be used exactly like an L<IO::File|IO::File> filehandle. 
553 This means that all normal output file operations can be carried out 
554 with C<$z>. 
555 For example, to write to a compressed file/buffer you can use either of 
556 these forms
557
558     $z->print("hello world\n");
559     print $z "hello world\n";
560
561 The mandatory parameter C<$output> is used to control the destination
562 of the compressed data. This parameter can take one of these forms.
563
564 =over 5
565
566 =item A filename
567
568 If the C<$output> parameter is a simple scalar, it is assumed to be a
569 filename. This file will be opened for writing and the compressed data
570 will be written to it.
571
572 =item A filehandle
573
574 If the C<$output> parameter is a filehandle, the compressed data will be
575 written to it.
576 The string '-' can be used as an alias for standard output.
577
578 =item A scalar reference 
579
580 If C<$output> is a scalar reference, the compressed data will be stored
581 in C<$$output>.
582
583 =back
584
585 If the C<$output> parameter is any other type, C<IO::Compress::Gzip>::new will
586 return undef.
587
588 =head2 Constructor Options
589
590 C<OPTS> is any combination of the following options:
591
592 =over 5
593
594 =item C<< AutoClose => 0|1 >>
595
596 This option is only valid when the C<$output> parameter is a filehandle. If
597 specified, and the value is true, it will result in the C<$output> being
598 closed once either the C<close> method is called or the C<IO::Compress::Gzip>
599 object is destroyed.
600
601 This parameter defaults to 0.
602
603 =item C<< Append => 0|1 >>
604
605 Opens C<$output> in append mode. 
606
607 The behaviour of this option is dependent on the type of C<$output>.
608
609 =over 5
610
611 =item * A Buffer
612
613 If C<$output> is a buffer and C<Append> is enabled, all compressed data
614 will be append to the end if C<$output>. Otherwise C<$output> will be
615 cleared before any data is written to it.
616
617 =item * A Filename
618
619 If C<$output> is a filename and C<Append> is enabled, the file will be
620 opened in append mode. Otherwise the contents of the file, if any, will be
621 truncated before any compressed data is written to it.
622
623 =item * A Filehandle
624
625 If C<$output> is a filehandle, the file pointer will be positioned to the
626 end of the file via a call to C<seek> before any compressed data is written
627 to it.  Otherwise the file pointer will not be moved.
628
629 =back
630
631 This parameter defaults to 0.
632
633 =item C<< Merge => 0|1 >>
634
635 This option is used to compress input data and append it to an existing
636 compressed data stream in C<$output>. The end result is a single compressed
637 data stream stored in C<$output>. 
638
639 It is a fatal error to attempt to use this option when C<$output> is not an
640 RFC 1952 data stream.
641
642 There are a number of other limitations with the C<Merge> option:
643
644 =over 5 
645
646 =item 1
647
648 This module needs to have been built with zlib 1.2.1 or better to work. A
649 fatal error will be thrown if C<Merge> is used with an older version of
650 zlib.  
651
652 =item 2
653
654 If C<$output> is a file or a filehandle, it must be seekable.
655
656 =back
657
658 This parameter defaults to 0.
659
660 =item -Level 
661
662 Defines the compression level used by zlib. The value should either be
663 a number between 0 and 9 (0 means no compression and 9 is maximum
664 compression), or one of the symbolic constants defined below.
665
666    Z_NO_COMPRESSION
667    Z_BEST_SPEED
668    Z_BEST_COMPRESSION
669    Z_DEFAULT_COMPRESSION
670
671 The default is Z_DEFAULT_COMPRESSION.
672
673 Note, these constants are not imported by C<IO::Compress::Gzip> by default.
674
675     use IO::Compress::Gzip qw(:strategy);
676     use IO::Compress::Gzip qw(:constants);
677     use IO::Compress::Gzip qw(:all);
678
679 =item -Strategy 
680
681 Defines the strategy used to tune the compression. Use one of the symbolic
682 constants defined below.
683
684    Z_FILTERED
685    Z_HUFFMAN_ONLY
686    Z_RLE
687    Z_FIXED
688    Z_DEFAULT_STRATEGY
689
690 The default is Z_DEFAULT_STRATEGY.
691
692 =item C<< Minimal => 0|1 >>
693
694 If specified, this option will force the creation of the smallest possible
695 compliant gzip header (which is exactly 10 bytes long) as defined in
696 RFC 1952.
697
698 See the section titled "Compliance" in RFC 1952 for a definition 
699 of the values used for the fields in the gzip header.
700
701 All other parameters that control the content of the gzip header will
702 be ignored if this parameter is set to 1.
703
704 This parameter defaults to 0.
705
706 =item C<< Comment => $comment >>
707
708 Stores the contents of C<$comment> in the COMMENT field in
709 the gzip header.
710 By default, no comment field is written to the gzip file.
711
712 If the C<-Strict> option is enabled, the comment can only consist of ISO
713 8859-1 characters plus line feed.
714
715 If the C<-Strict> option is disabled, the comment field can contain any
716 character except NULL. If any null characters are present, the field
717 will be truncated at the first NULL.
718
719 =item C<< Name => $string >>
720
721 Stores the contents of C<$string> in the gzip NAME header field. If
722 C<Name> is not specified, no gzip NAME field will be created.
723
724 If the C<-Strict> option is enabled, C<$string> can only consist of ISO
725 8859-1 characters.
726
727 If C<-Strict> is disabled, then C<$string> can contain any character
728 except NULL. If any null characters are present, the field will be
729 truncated at the first NULL.
730
731 =item C<< Time => $number >>
732
733 Sets the MTIME field in the gzip header to $number.
734
735 This field defaults to the time the C<IO::Compress::Gzip> object was created
736 if this option is not specified.
737
738 =item C<< TextFlag => 0|1 >>
739
740 This parameter controls the setting of the FLG.FTEXT bit in the gzip
741 header. It is used to signal that the data stored in the gzip file/buffer
742 is probably text.
743
744 The default is 0. 
745
746 =item C<< HeaderCRC => 0|1 >>
747
748 When true this parameter will set the FLG.FHCRC bit to 1 in the gzip header
749 and set the CRC16 header field to the CRC of the complete gzip header
750 except the CRC16 field itself.
751
752 B<Note> that gzip files created with the C<HeaderCRC> flag set to 1 cannot
753 be read by most, if not all, of the the standard gunzip utilities, most
754 notably gzip version 1.2.4. You should therefore avoid using this option if
755 you want to maximize the portability of your gzip files.
756
757 This parameter defaults to 0.
758
759 =item C<< OS_Code => $value >>
760
761 Stores C<$value> in the gzip OS header field. A number between 0 and 255 is
762 valid.
763
764 If not specified, this parameter defaults to the OS code of the Operating
765 System this module was built on. The value 3 is used as a catch-all for all
766 Unix variants and unknown Operating Systems.
767
768 =item C<< ExtraField => $data >>
769
770 This parameter allows additional metadata to be stored in the ExtraField in
771 the gzip header. An RFC 1952 compliant ExtraField consists of zero or more
772 subfields. Each subfield consists of a two byte header followed by the
773 subfield data.
774
775 The list of subfields can be supplied in any of the following formats
776
777     -ExtraField => [$id1, $data1,
778                     $id2, $data2,
779                      ...
780                    ]
781     -ExtraField => [ [$id1 => $data1],
782                      [$id2 => $data2],
783                      ...
784                    ]
785     -ExtraField => { $id1 => $data1,
786                      $id2 => $data2,
787                      ...
788                    }
789
790 Where C<$id1>, C<$id2> are two byte subfield ID's. The second byte of
791 the ID cannot be 0, unless the C<Strict> option has been disabled.
792
793 If you use the hash syntax, you have no control over the order in which
794 the ExtraSubFields are stored, plus you cannot have SubFields with
795 duplicate ID.
796
797 Alternatively the list of subfields can by supplied as a scalar, thus
798
799     -ExtraField => $rawdata
800
801 If you use the raw format, and the C<Strict> option is enabled,
802 C<IO::Compress::Gzip> will check that C<$rawdata> consists of zero or more
803 conformant sub-fields. When C<Strict> is disabled, C<$rawdata> can
804 consist of any arbitrary byte stream.
805
806 The maximum size of the Extra Field 65535 bytes.
807
808 =item C<< ExtraFlags => $value >>
809
810 Sets the XFL byte in the gzip header to C<$value>.
811
812 If this option is not present, the value stored in XFL field will be
813 determined by the setting of the C<Level> option.
814
815 If C<< Level => Z_BEST_SPEED >> has been specified then XFL is set to 2.
816 If C<< Level => Z_BEST_COMPRESSION >> has been specified then XFL is set to 4.
817 Otherwise XFL is set to 0.
818
819 =item C<< Strict => 0|1 >>
820
821 C<Strict> will optionally police the values supplied with other options
822 to ensure they are compliant with RFC1952.
823
824 This option is enabled by default.
825
826 If C<Strict> is enabled the following behaviour will be policed:
827
828 =over 5
829
830 =item * 
831
832 The value supplied with the C<Name> option can only contain ISO 8859-1
833 characters.
834
835 =item * 
836
837 The value supplied with the C<Comment> option can only contain ISO 8859-1
838 characters plus line-feed.
839
840 =item *
841
842 The values supplied with the C<-Name> and C<-Comment> options cannot
843 contain multiple embedded nulls.
844
845 =item * 
846
847 If an C<ExtraField> option is specified and it is a simple scalar,
848 it must conform to the sub-field structure as defined in RFC 1952.
849
850 =item * 
851
852 If an C<ExtraField> option is specified the second byte of the ID will be
853 checked in each subfield to ensure that it does not contain the reserved
854 value 0x00.
855
856 =back
857
858 When C<Strict> is disabled the following behaviour will be policed:
859
860 =over 5
861
862 =item * 
863
864 The value supplied with C<-Name> option can contain
865 any character except NULL.
866
867 =item * 
868
869 The value supplied with C<-Comment> option can contain any character
870 except NULL.
871
872 =item *
873
874 The values supplied with the C<-Name> and C<-Comment> options can contain
875 multiple embedded nulls. The string written to the gzip header will
876 consist of the characters up to, but not including, the first embedded
877 NULL.
878
879 =item * 
880
881 If an C<ExtraField> option is specified and it is a simple scalar, the
882 structure will not be checked. The only error is if the length is too big.
883
884 =item * 
885
886 The ID header in an C<ExtraField> sub-field can consist of any two bytes.
887
888 =back
889
890 =back
891
892 =head2 Examples
893
894 TODO
895
896 =head1 Methods 
897
898 =head2 print
899
900 Usage is
901
902     $z->print($data)
903     print $z $data
904
905 Compresses and outputs the contents of the C<$data> parameter. This
906 has the same behaviour as the C<print> built-in.
907
908 Returns true if successful.
909
910 =head2 printf
911
912 Usage is
913
914     $z->printf($format, $data)
915     printf $z $format, $data
916
917 Compresses and outputs the contents of the C<$data> parameter.
918
919 Returns true if successful.
920
921 =head2 syswrite
922
923 Usage is
924
925     $z->syswrite $data
926     $z->syswrite $data, $length
927     $z->syswrite $data, $length, $offset
928
929 Compresses and outputs the contents of the C<$data> parameter.
930
931 Returns the number of uncompressed bytes written, or C<undef> if
932 unsuccessful.
933
934 =head2 write
935
936 Usage is
937
938     $z->write $data
939     $z->write $data, $length
940     $z->write $data, $length, $offset
941
942 Compresses and outputs the contents of the C<$data> parameter.
943
944 Returns the number of uncompressed bytes written, or C<undef> if
945 unsuccessful.
946
947 =head2 flush
948
949 Usage is
950
951     $z->flush;
952     $z->flush($flush_type);
953
954 Flushes any pending compressed data to the output file/buffer.
955
956 This method takes an optional parameter, C<$flush_type>, that controls
957 how the flushing will be carried out. By default the C<$flush_type>
958 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
959 C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is
960 strongly recommended that you only set the C<flush_type> parameter if
961 you fully understand the implications of what it does - overuse of C<flush>
962 can seriously degrade the level of compression achieved. See the C<zlib>
963 documentation for details.
964
965 Returns true on success.
966
967 =head2 tell
968
969 Usage is
970
971     $z->tell()
972     tell $z
973
974 Returns the uncompressed file offset.
975
976 =head2 eof
977
978 Usage is
979
980     $z->eof();
981     eof($z);
982
983 Returns true if the C<close> method has been called.
984
985 =head2 seek
986
987     $z->seek($position, $whence);
988     seek($z, $position, $whence);
989
990 Provides a sub-set of the C<seek> functionality, with the restriction
991 that it is only legal to seek forward in the output file/buffer.
992 It is a fatal error to attempt to seek backward.
993
994 Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
995
996 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
997 SEEK_CUR or SEEK_END.
998
999 Returns 1 on success, 0 on failure.
1000
1001 =head2 binmode
1002
1003 Usage is
1004
1005     $z->binmode
1006     binmode $z ;
1007
1008 This is a noop provided for completeness.
1009
1010 =head2 opened
1011
1012     $z->opened()
1013
1014 Returns true if the object currently refers to a opened file/buffer. 
1015
1016 =head2 autoflush
1017
1018     my $prev = $z->autoflush()
1019     my $prev = $z->autoflush(EXPR)
1020
1021 If the C<$z> object is associated with a file or a filehandle, this method
1022 returns the current autoflush setting for the underlying filehandle. If
1023 C<EXPR> is present, and is non-zero, it will enable flushing after every
1024 write/print operation.
1025
1026 If C<$z> is associated with a buffer, this method has no effect and always
1027 returns C<undef>.
1028
1029 B<Note> that the special variable C<$|> B<cannot> be used to set or
1030 retrieve the autoflush setting.
1031
1032 =head2 input_line_number
1033
1034     $z->input_line_number()
1035     $z->input_line_number(EXPR)
1036
1037 This method always returns C<undef> when compressing. 
1038
1039 =head2 fileno
1040
1041     $z->fileno()
1042     fileno($z)
1043
1044 If the C<$z> object is associated with a file or a filehandle, C<fileno>
1045 will return the underlying file descriptor. Once the C<close> method is
1046 called C<fileno> will return C<undef>.
1047
1048 If the C<$z> object is is associated with a buffer, this method will return
1049 C<undef>.
1050
1051 =head2 close
1052
1053     $z->close() ;
1054     close $z ;
1055
1056 Flushes any pending compressed data and then closes the output file/buffer. 
1057
1058 For most versions of Perl this method will be automatically invoked if
1059 the IO::Compress::Gzip object is destroyed (either explicitly or by the
1060 variable with the reference to the object going out of scope). The
1061 exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In
1062 these cases, the C<close> method will be called automatically, but
1063 not until global destruction of all live objects when the program is
1064 terminating.
1065
1066 Therefore, if you want your scripts to be able to run on all versions
1067 of Perl, you should call C<close> explicitly and not rely on automatic
1068 closing.
1069
1070 Returns true on success, otherwise 0.
1071
1072 If the C<AutoClose> option has been enabled when the IO::Compress::Gzip
1073 object was created, and the object is associated with a file, the
1074 underlying file will also be closed.
1075
1076 =head2 newStream([OPTS])
1077
1078 Usage is
1079
1080     $z->newStream( [OPTS] )
1081
1082 Closes the current compressed data stream and starts a new one.
1083
1084 OPTS consists of any of the the options that are available when creating
1085 the C<$z> object.
1086
1087 See the L</"Constructor Options"> section for more details.
1088
1089 =head2 deflateParams
1090
1091 Usage is
1092
1093     $z->deflateParams
1094
1095 TODO
1096
1097 =head1 Importing 
1098
1099 A number of symbolic constants are required by some methods in 
1100 C<IO::Compress::Gzip>. None are imported by default.
1101
1102 =over 5
1103
1104 =item :all
1105
1106 Imports C<gzip>, C<$GzipError> and all symbolic
1107 constants that can be used by C<IO::Compress::Gzip>. Same as doing this
1108
1109     use IO::Compress::Gzip qw(gzip $GzipError :constants) ;
1110
1111 =item :constants
1112
1113 Import all symbolic constants. Same as doing this
1114
1115     use IO::Compress::Gzip qw(:flush :level :strategy) ;
1116
1117 =item :flush
1118
1119 These symbolic constants are used by the C<flush> method.
1120
1121     Z_NO_FLUSH
1122     Z_PARTIAL_FLUSH
1123     Z_SYNC_FLUSH
1124     Z_FULL_FLUSH
1125     Z_FINISH
1126     Z_BLOCK
1127
1128 =item :level
1129
1130 These symbolic constants are used by the C<Level> option in the constructor.
1131
1132     Z_NO_COMPRESSION
1133     Z_BEST_SPEED
1134     Z_BEST_COMPRESSION
1135     Z_DEFAULT_COMPRESSION
1136
1137 =item :strategy
1138
1139 These symbolic constants are used by the C<Strategy> option in the constructor.
1140
1141     Z_FILTERED
1142     Z_HUFFMAN_ONLY
1143     Z_RLE
1144     Z_FIXED
1145     Z_DEFAULT_STRATEGY
1146
1147     
1148     
1149
1150 =back
1151
1152 =head1 EXAMPLES
1153
1154 =head2 Apache::GZip Revisited
1155
1156 See L<IO::Compress::FAQ|IO::Compress::FAQ/"Apache::GZip Revisited">
1157
1158     
1159
1160 =head2 Working with Net::FTP
1161
1162 See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
1163
1164 =head1 SEE ALSO
1165
1166 L<Compress::Zlib>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
1167
1168 L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
1169
1170 L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
1171 L<Archive::Tar|Archive::Tar>,
1172 L<IO::Zlib|IO::Zlib>
1173
1174 For RFC 1950, 1951 and 1952 see 
1175 F<http://www.faqs.org/rfcs/rfc1950.html>,
1176 F<http://www.faqs.org/rfcs/rfc1951.html> and
1177 F<http://www.faqs.org/rfcs/rfc1952.html>
1178
1179 The I<zlib> compression library was written by Jean-loup Gailly
1180 F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
1181
1182 The primary site for the I<zlib> compression library is
1183 F<http://www.zlib.org>.
1184
1185 The primary site for gzip is F<http://www.gzip.org>.
1186
1187 =head1 AUTHOR
1188
1189 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
1190
1191 =head1 MODIFICATION HISTORY
1192
1193 See the Changes file.
1194
1195 =head1 COPYRIGHT AND LICENSE
1196
1197 Copyright (c) 2005-2009 Paul Marquess. All rights reserved.
1198
1199 This program is free software; you can redistribute it and/or
1200 modify it under the same terms as Perl itself.
1201