9e706d28d9c576a0001a77bce6435d151cad3701
[p5sagit/p5-mst-13.2.git] / ext / Compress / IO / Zlib / 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;
12
13 use Compress::Raw::Zlib ;
14 use IO::Compress::Base::Common qw(:Status :Parse createSelfTiedObject);
15 use IO::Compress::Gzip::Constants;
16 use IO::Compress::Zlib::Extra;
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.000_13';
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
278
279 IO::Compress::Gzip - Write RFC 1952 files/buffers
280  
281  
282
283 =head1 SYNOPSIS
284
285     use IO::Compress::Gzip qw(gzip $GzipError) ;
286
287
288     my $status = gzip $input => $output [,OPTS] 
289         or die "gzip failed: $GzipError\n";
290
291     my $z = new IO::Compress::Gzip $output [,OPTS]
292         or die "gzip failed: $GzipError\n";
293
294     $z->print($string);
295     $z->printf($format, $string);
296     $z->write($string);
297     $z->syswrite($string [, $length, $offset]);
298     $z->flush();
299     $z->tell();
300     $z->eof();
301     $z->seek($position, $whence);
302     $z->binmode();
303     $z->fileno();
304     $z->opened();
305     $z->autoflush();
306     $z->input_line_number();
307     $z->newStream( [OPTS] );
308     
309     $z->deflateParams();
310     
311     $z->close() ;
312
313     $GzipError ;
314
315     # IO::File mode
316
317     print $z $string;
318     printf $z $format, $string;
319     tell $z
320     eof $z
321     seek $z, $position, $whence
322     binmode $z
323     fileno $z
324     close $z ;
325     
326
327 =head1 DESCRIPTION
328
329
330
331 B<WARNING -- This is a Beta release>. 
332
333 =over 5
334
335 =item * DO NOT use in production code.
336
337 =item * The documentation is incomplete in places.
338
339 =item * Parts of the interface defined here are tentative.
340
341 =item * Please report any problems you find.
342
343 =back
344
345
346
347
348 This module provides a Perl interface that allows writing compressed
349 data to files or buffer as defined in RFC 1952.
350
351
352
353 All the gzip headers defined in RFC 1952 can be created using
354 this module.
355
356
357
358
359
360
361
362 For reading RFC 1952 files/buffers, see the companion module 
363 L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
364
365
366 =head1 Functional Interface
367
368 A top-level function, C<gzip>, is provided to carry out
369 "one-shot" compression between buffers and/or files. For finer
370 control over the compression process, see the L</"OO Interface">
371 section.
372
373     use IO::Compress::Gzip qw(gzip $GzipError) ;
374
375     gzip $input => $output [,OPTS] 
376         or die "gzip failed: $GzipError\n";
377
378
379
380 The functional interface needs Perl5.005 or better.
381
382
383 =head2 gzip $input => $output [, OPTS]
384
385
386 C<gzip> expects at least two parameters, C<$input> and C<$output>.
387
388 =head3 The C<$input> parameter
389
390 The parameter, C<$input>, is used to define the source of
391 the uncompressed data. 
392
393 It can take one of the following forms:
394
395 =over 5
396
397 =item A filename
398
399 If the C<$input> parameter is a simple scalar, it is assumed to be a
400 filename. This file will be opened for reading and the input data
401 will be read from it.
402
403 =item A filehandle
404
405 If the C<$input> parameter is a filehandle, the input data will be
406 read from it.
407 The string '-' can be used as an alias for standard input.
408
409 =item A scalar reference 
410
411 If C<$input> is a scalar reference, the input data will be read
412 from C<$$input>.
413
414 =item An array reference 
415
416 If C<$input> is an array reference, each element in the array must be a
417 filename.
418
419 The input data will be read from each file in turn. 
420
421 The complete array will be walked to ensure that it only
422 contains valid filenames before any data is compressed.
423
424
425
426 =item An Input FileGlob string
427
428 If C<$input> is a string that is delimited by the characters "<" and ">"
429 C<gzip> will assume that it is an I<input fileglob string>. The
430 input is the list of files that match the fileglob.
431
432 If the fileglob does not match any files ...
433
434 See L<File::GlobMapper|File::GlobMapper> for more details.
435
436
437 =back
438
439 If the C<$input> parameter is any other type, C<undef> will be returned.
440
441
442 In addition, if C<$input> is a simple filename, the default values for
443 the C<Name> and C<Time> options will be sourced from that file.
444
445 If you do not want to use these defaults they can be overridden by
446 explicitly setting the C<Name> and C<Time> options or by setting the
447 C<Minimal> parameter.
448
449
450
451 =head3 The C<$output> parameter
452
453 The parameter C<$output> is used to control the destination of the
454 compressed data. This parameter can take one of these forms.
455
456 =over 5
457
458 =item A filename
459
460 If the C<$output> parameter is a simple scalar, it is assumed to be a
461 filename.  This file will be opened for writing and the compressed
462 data will be written to it.
463
464 =item A filehandle
465
466 If the C<$output> parameter is a filehandle, the compressed data
467 will be written to it.
468 The string '-' can be used as an alias for standard output.
469
470
471 =item A scalar reference 
472
473 If C<$output> is a scalar reference, the compressed data will be
474 stored in C<$$output>.
475
476
477
478 =item An Array Reference
479
480 If C<$output> is an array reference, the compressed data will be
481 pushed onto the array.
482
483 =item An Output FileGlob
484
485 If C<$output> is a string that is delimited by the characters "<" and ">"
486 C<gzip> will assume that it is an I<output fileglob string>. The
487 output is the list of files that match the fileglob.
488
489 When C<$output> is an fileglob string, C<$input> must also be a fileglob
490 string. Anything else is an error.
491
492 =back
493
494 If the C<$output> parameter is any other type, C<undef> will be returned.
495
496
497
498 =head2 Notes
499
500
501
502 When C<$input> maps to multiple files/buffers and C<$output> is a single
503 file/buffer the input files/buffers will be stored
504 in C<$output> as a concatenated series of compressed data streams.
505
506
507
508
509
510
511 =head2 Optional Parameters
512
513 Unless specified below, the optional parameters for C<gzip>,
514 C<OPTS>, are the same as those used with the OO interface defined in the
515 L</"Constructor Options"> section below.
516
517 =over 5
518
519 =item C<< AutoClose => 0|1 >>
520
521 This option applies to any input or output data streams to 
522 C<gzip> that are filehandles.
523
524 If C<AutoClose> is specified, and the value is true, it will result in all
525 input and/or output filehandles being closed once C<gzip> has
526 completed.
527
528 This parameter defaults to 0.
529
530
531 =item C<< BinModeIn => 0|1 >>
532
533 When reading from a file or filehandle, set C<binmode> before reading.
534
535 Defaults to 0.
536
537
538
539
540
541 =item C<< Append => 0|1 >>
542
543 TODO
544
545
546 =back
547
548
549
550 =head2 Examples
551
552 To read the contents of the file C<file1.txt> and write the compressed
553 data to the file C<file1.txt.gz>.
554
555     use strict ;
556     use warnings ;
557     use IO::Compress::Gzip qw(gzip $GzipError) ;
558
559     my $input = "file1.txt";
560     gzip $input => "$input.gz"
561         or die "gzip failed: $GzipError\n";
562
563
564 To read from an existing Perl filehandle, C<$input>, and write the
565 compressed data to a buffer, C<$buffer>.
566
567     use strict ;
568     use warnings ;
569     use IO::Compress::Gzip qw(gzip $GzipError) ;
570     use IO::File ;
571
572     my $input = new IO::File "<file1.txt"
573         or die "Cannot open 'file1.txt': $!\n" ;
574     my $buffer ;
575     gzip $input => \$buffer 
576         or die "gzip failed: $GzipError\n";
577
578 To compress all files in the directory "/my/home" that match "*.txt"
579 and store the compressed data in the same directory
580
581     use strict ;
582     use warnings ;
583     use IO::Compress::Gzip qw(gzip $GzipError) ;
584
585     gzip '</my/home/*.txt>' => '<*.gz>'
586         or die "gzip failed: $GzipError\n";
587
588 and if you want to compress each file one at a time, this will do the trick
589
590     use strict ;
591     use warnings ;
592     use IO::Compress::Gzip qw(gzip $GzipError) ;
593
594     for my $input ( glob "/my/home/*.txt" )
595     {
596         my $output = "$input.gz" ;
597         gzip $input => $output 
598             or die "Error compressing '$input': $GzipError\n";
599     }
600
601
602 =head1 OO Interface
603
604 =head2 Constructor
605
606 The format of the constructor for C<IO::Compress::Gzip> is shown below
607
608     my $z = new IO::Compress::Gzip $output [,OPTS]
609         or die "IO::Compress::Gzip failed: $GzipError\n";
610
611 It returns an C<IO::Compress::Gzip> object on success and undef on failure. 
612 The variable C<$GzipError> will contain an error message on failure.
613
614 If you are running Perl 5.005 or better the object, C<$z>, returned from 
615 IO::Compress::Gzip can be used exactly like an L<IO::File|IO::File> filehandle. 
616 This means that all normal output file operations can be carried out 
617 with C<$z>. 
618 For example, to write to a compressed file/buffer you can use either of 
619 these forms
620
621     $z->print("hello world\n");
622     print $z "hello world\n";
623
624 The mandatory parameter C<$output> is used to control the destination
625 of the compressed data. This parameter can take one of these forms.
626
627 =over 5
628
629 =item A filename
630
631 If the C<$output> parameter is a simple scalar, it is assumed to be a
632 filename. This file will be opened for writing and the compressed data
633 will be written to it.
634
635 =item A filehandle
636
637 If the C<$output> parameter is a filehandle, the compressed data will be
638 written to it.
639 The string '-' can be used as an alias for standard output.
640
641
642 =item A scalar reference 
643
644 If C<$output> is a scalar reference, the compressed data will be stored
645 in C<$$output>.
646
647 =back
648
649 If the C<$output> parameter is any other type, C<IO::Compress::Gzip>::new will
650 return undef.
651
652 =head2 Constructor Options
653
654 C<OPTS> is any combination of the following options:
655
656 =over 5
657
658 =item C<< AutoClose => 0|1 >>
659
660 This option is only valid when the C<$output> parameter is a filehandle. If
661 specified, and the value is true, it will result in the C<$output> being
662 closed once either the C<close> method is called or the C<IO::Compress::Gzip>
663 object is destroyed.
664
665 This parameter defaults to 0.
666
667 =item C<< Append => 0|1 >>
668
669 Opens C<$output> in append mode. 
670
671 The behaviour of this option is dependent on the type of C<$output>.
672
673 =over 5
674
675 =item * A Buffer
676
677 If C<$output> is a buffer and C<Append> is enabled, all compressed data
678 will be append to the end if C<$output>. Otherwise C<$output> will be
679 cleared before any data is written to it.
680
681 =item * A Filename
682
683 If C<$output> is a filename and C<Append> is enabled, the file will be
684 opened in append mode. Otherwise the contents of the file, if any, will be
685 truncated before any compressed data is written to it.
686
687 =item * A Filehandle
688
689 If C<$output> is a filehandle, the file pointer will be positioned to the
690 end of the file via a call to C<seek> before any compressed data is written
691 to it.  Otherwise the file pointer will not be moved.
692
693 =back
694
695 This parameter defaults to 0.
696
697
698
699
700
701 =item C<< Merge => 0|1 >>
702
703 This option is used to compress input data and append it to an existing
704 compressed data stream in C<$output>. The end result is a single compressed
705 data stream stored in C<$output>. 
706
707
708
709 It is a fatal error to attempt to use this option when C<$output> is not an
710 RFC 1952 data stream.
711
712
713
714 There are a number of other limitations with the C<Merge> option:
715
716 =over 5 
717
718 =item 1
719
720 This module needs to have been built with zlib 1.2.1 or better to work. A
721 fatal error will be thrown if C<Merge> is used with an older version of
722 zlib.  
723
724 =item 2
725
726 If C<$output> is a file or a filehandle, it must be seekable.
727
728 =back
729
730
731 This parameter defaults to 0.
732
733
734
735 =item -Level 
736
737 Defines the compression level used by zlib. The value should either be
738 a number between 0 and 9 (0 means no compression and 9 is maximum
739 compression), or one of the symbolic constants defined below.
740
741    Z_NO_COMPRESSION
742    Z_BEST_SPEED
743    Z_BEST_COMPRESSION
744    Z_DEFAULT_COMPRESSION
745
746 The default is Z_DEFAULT_COMPRESSION.
747
748 Note, these constants are not imported by C<IO::Compress::Gzip> by default.
749
750     use IO::Compress::Gzip qw(:strategy);
751     use IO::Compress::Gzip qw(:constants);
752     use IO::Compress::Gzip qw(:all);
753
754 =item -Strategy 
755
756 Defines the strategy used to tune the compression. Use one of the symbolic
757 constants defined below.
758
759    Z_FILTERED
760    Z_HUFFMAN_ONLY
761    Z_RLE
762    Z_FIXED
763    Z_DEFAULT_STRATEGY
764
765 The default is Z_DEFAULT_STRATEGY.
766
767
768
769
770
771
772 =item C<< Minimal => 0|1 >>
773
774 If specified, this option will force the creation of the smallest possible
775 compliant gzip header (which is exactly 10 bytes long) as defined in
776 RFC 1952.
777
778 See the section titled "Compliance" in RFC 1952 for a definition 
779 of the values used for the fields in the gzip header.
780
781 All other parameters that control the content of the gzip header will
782 be ignored if this parameter is set to 1.
783
784 This parameter defaults to 0.
785
786 =item C<< Comment => $comment >>
787
788 Stores the contents of C<$comment> in the COMMENT field in
789 the gzip header.
790 By default, no comment field is written to the gzip file.
791
792 If the C<-Strict> option is enabled, the comment can only consist of ISO
793 8859-1 characters plus line feed.
794
795 If the C<-Strict> option is disabled, the comment field can contain any
796 character except NULL. If any null characters are present, the field
797 will be truncated at the first NULL.
798
799 =item C<< Name => $string >>
800
801 Stores the contents of C<$string> in the gzip NAME header field. If
802 C<Name> is not specified, no gzip NAME field will be created.
803
804 If the C<-Strict> option is enabled, C<$string> can only consist of ISO
805 8859-1 characters.
806
807 If C<-Strict> is disabled, then C<$string> can contain any character
808 except NULL. If any null characters are present, the field will be
809 truncated at the first NULL.
810
811 =item C<< Time => $number >>
812
813 Sets the MTIME field in the gzip header to $number.
814
815 This field defaults to the time the C<IO::Compress::Gzip> object was created
816 if this option is not specified.
817
818 =item C<< TextFlag => 0|1 >>
819
820 This parameter controls the setting of the FLG.FTEXT bit in the gzip
821 header. It is used to signal that the data stored in the gzip file/buffer
822 is probably text.
823
824 The default is 0. 
825
826 =item C<< HeaderCRC => 0|1 >>
827
828 When true this parameter will set the FLG.FHCRC bit to 1 in the gzip header
829 and set the CRC16 header field to the CRC of the complete gzip header
830 except the CRC16 field itself.
831
832 B<Note> that gzip files created with the C<HeaderCRC> flag set to 1 cannot
833 be read by most, if not all, of the the standard gunzip utilities, most
834 notably gzip version 1.2.4. You should therefore avoid using this option if
835 you want to maximize the portability of your gzip files.
836
837 This parameter defaults to 0.
838
839 =item C<< OS_Code => $value >>
840
841 Stores C<$value> in the gzip OS header field. A number between 0 and 255 is
842 valid.
843
844 If not specified, this parameter defaults to the OS code of the Operating
845 System this module was built on. The value 3 is used as a catch-all for all
846 Unix variants and unknown Operating Systems.
847
848 =item C<< ExtraField => $data >>
849
850 This parameter allows additional metadata to be stored in the ExtraField in
851 the gzip header. An RFC 1952 compliant ExtraField consists of zero or more
852 subfields. Each subfield consists of a two byte header followed by the
853 subfield data.
854
855 The list of subfields can be supplied in any of the following formats
856
857     -ExtraField => [$id1, $data1,
858                     $id2, $data2,
859                      ...
860                    ]
861     -ExtraField => [ [$id1 => $data1],
862                      [$id2 => $data2],
863                      ...
864                    ]
865     -ExtraField => { $id1 => $data1,
866                      $id2 => $data2,
867                      ...
868                    }
869
870 Where C<$id1>, C<$id2> are two byte subfield ID's. The second byte of
871 the ID cannot be 0, unless the C<Strict> option has been disabled.
872
873 If you use the hash syntax, you have no control over the order in which
874 the ExtraSubFields are stored, plus you cannot have SubFields with
875 duplicate ID.
876
877 Alternatively the list of subfields can by supplied as a scalar, thus
878
879     -ExtraField => $rawdata
880
881 If you use the raw format, and the C<Strict> option is enabled,
882 C<IO::Compress::Gzip> will check that C<$rawdata> consists of zero or more
883 conformant sub-fields. When C<Strict> is disabled, C<$rawdata> can
884 consist of any arbitrary byte stream.
885
886 The maximum size of the Extra Field 65535 bytes.
887
888 =item C<< ExtraFlags => $value >>
889
890 Sets the XFL byte in the gzip header to C<$value>.
891
892 If this option is not present, the value stored in XFL field will be
893 determined by the setting of the C<Level> option.
894
895 If C<< Level => Z_BEST_SPEED >> has been specified then XFL is set to 2.
896 If C<< Level => Z_BEST_COMPRESSION >> has been specified then XFL is set to 4.
897 Otherwise XFL is set to 0.
898
899
900
901 =item C<< Strict => 0|1 >>
902
903
904
905 C<Strict> will optionally police the values supplied with other options
906 to ensure they are compliant with RFC1952.
907
908 This option is enabled by default.
909
910 If C<Strict> is enabled the following behaviour will be policed:
911
912 =over 5
913
914 =item * 
915
916 The value supplied with the C<Name> option can only contain ISO 8859-1
917 characters.
918
919 =item * 
920
921 The value supplied with the C<Comment> option can only contain ISO 8859-1
922 characters plus line-feed.
923
924 =item *
925
926 The values supplied with the C<-Name> and C<-Comment> options cannot
927 contain multiple embedded nulls.
928
929 =item * 
930
931 If an C<ExtraField> option is specified and it is a simple scalar,
932 it must conform to the sub-field structure as defined in RFC 1952.
933
934 =item * 
935
936 If an C<ExtraField> option is specified the second byte of the ID will be
937 checked in each subfield to ensure that it does not contain the reserved
938 value 0x00.
939
940 =back
941
942 When C<Strict> is disabled the following behaviour will be policed:
943
944 =over 5
945
946 =item * 
947
948 The value supplied with C<-Name> option can contain
949 any character except NULL.
950
951 =item * 
952
953 The value supplied with C<-Comment> option can contain any character
954 except NULL.
955
956 =item *
957
958 The values supplied with the C<-Name> and C<-Comment> options can contain
959 multiple embedded nulls. The string written to the gzip header will
960 consist of the characters up to, but not including, the first embedded
961 NULL.
962
963 =item * 
964
965 If an C<ExtraField> option is specified and it is a simple scalar, the
966 structure will not be checked. The only error is if the length is too big.
967
968 =item * 
969
970 The ID header in an C<ExtraField> sub-field can consist of any two bytes.
971
972 =back
973
974
975
976 =back
977
978 =head2 Examples
979
980 TODO
981
982 =head1 Methods 
983
984 =head2 print
985
986 Usage is
987
988     $z->print($data)
989     print $z $data
990
991 Compresses and outputs the contents of the C<$data> parameter. This
992 has the same behaviour as the C<print> built-in.
993
994 Returns true if successful.
995
996 =head2 printf
997
998 Usage is
999
1000     $z->printf($format, $data)
1001     printf $z $format, $data
1002
1003 Compresses and outputs the contents of the C<$data> parameter.
1004
1005 Returns true if successful.
1006
1007 =head2 syswrite
1008
1009 Usage is
1010
1011     $z->syswrite $data
1012     $z->syswrite $data, $length
1013     $z->syswrite $data, $length, $offset
1014
1015 Compresses and outputs the contents of the C<$data> parameter.
1016
1017 Returns the number of uncompressed bytes written, or C<undef> if
1018 unsuccessful.
1019
1020 =head2 write
1021
1022 Usage is
1023
1024     $z->write $data
1025     $z->write $data, $length
1026     $z->write $data, $length, $offset
1027
1028 Compresses and outputs the contents of the C<$data> parameter.
1029
1030 Returns the number of uncompressed bytes written, or C<undef> if
1031 unsuccessful.
1032
1033 =head2 flush
1034
1035 Usage is
1036
1037
1038     $z->flush;
1039     $z->flush($flush_type);
1040
1041
1042 Flushes any pending compressed data to the output file/buffer.
1043
1044
1045 This method takes an optional parameter, C<$flush_type>, that controls
1046 how the flushing will be carried out. By default the C<$flush_type>
1047 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
1048 C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is
1049 strongly recommended that you only set the C<flush_type> parameter if
1050 you fully understand the implications of what it does - overuse of C<flush>
1051 can seriously degrade the level of compression achieved. See the C<zlib>
1052 documentation for details.
1053
1054
1055 Returns true on success.
1056
1057
1058 =head2 tell
1059
1060 Usage is
1061
1062     $z->tell()
1063     tell $z
1064
1065 Returns the uncompressed file offset.
1066
1067 =head2 eof
1068
1069 Usage is
1070
1071     $z->eof();
1072     eof($z);
1073
1074
1075
1076 Returns true if the C<close> method has been called.
1077
1078
1079
1080 =head2 seek
1081
1082     $z->seek($position, $whence);
1083     seek($z, $position, $whence);
1084
1085
1086
1087
1088 Provides a sub-set of the C<seek> functionality, with the restriction
1089 that it is only legal to seek forward in the output file/buffer.
1090 It is a fatal error to attempt to seek backward.
1091
1092 Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
1093
1094
1095
1096 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
1097 SEEK_CUR or SEEK_END.
1098
1099 Returns 1 on success, 0 on failure.
1100
1101 =head2 binmode
1102
1103 Usage is
1104
1105     $z->binmode
1106     binmode $z ;
1107
1108 This is a noop provided for completeness.
1109
1110 =head2 opened
1111
1112     $z->opened()
1113
1114 Returns true if the object currently refers to a opened file/buffer. 
1115
1116 =head2 autoflush
1117
1118     my $prev = $z->autoflush()
1119     my $prev = $z->autoflush(EXPR)
1120
1121 If the C<$z> object is associated with a file or a filehandle, this method
1122 returns the current autoflush setting for the underlying filehandle. If
1123 C<EXPR> is present, and is non-zero, it will enable flushing after every
1124 write/print operation.
1125
1126 If C<$z> is associated with a buffer, this method has no effect and always
1127 returns C<undef>.
1128
1129 B<Note> that the special variable C<$|> B<cannot> be used to set or
1130 retrieve the autoflush setting.
1131
1132 =head2 input_line_number
1133
1134     $z->input_line_number()
1135     $z->input_line_number(EXPR)
1136
1137
1138 This method always returns C<undef> when compressing. 
1139
1140
1141
1142 =head2 fileno
1143
1144     $z->fileno()
1145     fileno($z)
1146
1147 If the C<$z> object is associated with a file or a filehandle, this method
1148 will return the underlying file descriptor.
1149
1150 If the C<$z> object is is associated with a buffer, this method will
1151 return undef.
1152
1153 =head2 close
1154
1155     $z->close() ;
1156     close $z ;
1157
1158
1159
1160 Flushes any pending compressed data and then closes the output file/buffer. 
1161
1162
1163
1164 For most versions of Perl this method will be automatically invoked if
1165 the IO::Compress::Gzip object is destroyed (either explicitly or by the
1166 variable with the reference to the object going out of scope). The
1167 exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In
1168 these cases, the C<close> method will be called automatically, but
1169 not until global destruction of all live objects when the program is
1170 terminating.
1171
1172 Therefore, if you want your scripts to be able to run on all versions
1173 of Perl, you should call C<close> explicitly and not rely on automatic
1174 closing.
1175
1176 Returns true on success, otherwise 0.
1177
1178 If the C<AutoClose> option has been enabled when the IO::Compress::Gzip
1179 object was created, and the object is associated with a file, the
1180 underlying file will also be closed.
1181
1182
1183
1184
1185 =head2 newStream([OPTS])
1186
1187 Usage is
1188
1189     $z->newStream( [OPTS] )
1190
1191 Closes the current compressed data stream and starts a new one.
1192
1193 OPTS consists of any of the the options that are available when creating
1194 the C<$z> object.
1195
1196 See the L</"Constructor Options"> section for more details.
1197
1198
1199 =head2 deflateParams
1200
1201 Usage is
1202
1203     $z->deflateParams
1204
1205 TODO
1206
1207
1208 =head1 Importing 
1209
1210
1211 A number of symbolic constants are required by some methods in 
1212 C<IO::Compress::Gzip>. None are imported by default.
1213
1214
1215
1216 =over 5
1217
1218 =item :all
1219
1220
1221 Imports C<gzip>, C<$GzipError> and all symbolic
1222 constants that can be used by C<IO::Compress::Gzip>. Same as doing this
1223
1224     use IO::Compress::Gzip qw(gzip $GzipError :constants) ;
1225
1226 =item :constants
1227
1228 Import all symbolic constants. Same as doing this
1229
1230
1231     use IO::Compress::Gzip qw(:flush :level :strategy) ;
1232
1233
1234 =item :flush
1235
1236 These symbolic constants are used by the C<flush> method.
1237
1238     Z_NO_FLUSH
1239     Z_PARTIAL_FLUSH
1240     Z_SYNC_FLUSH
1241     Z_FULL_FLUSH
1242     Z_FINISH
1243     Z_BLOCK
1244
1245 =item :level
1246
1247 These symbolic constants are used by the C<Level> option in the constructor.
1248
1249     Z_NO_COMPRESSION
1250     Z_BEST_SPEED
1251     Z_BEST_COMPRESSION
1252     Z_DEFAULT_COMPRESSION
1253
1254
1255 =item :strategy
1256
1257 These symbolic constants are used by the C<Strategy> option in the constructor.
1258
1259     Z_FILTERED
1260     Z_HUFFMAN_ONLY
1261     Z_RLE
1262     Z_FIXED
1263     Z_DEFAULT_STRATEGY
1264
1265     
1266     
1267
1268 =back
1269
1270 For 
1271
1272 =head1 EXAMPLES
1273
1274 TODO
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286 =head1 SEE ALSO
1287
1288 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::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
1289
1290 L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
1291
1292 L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
1293 L<Archive::Tar|Archive::Tar>,
1294 L<IO::Zlib|IO::Zlib>
1295
1296
1297 For RFC 1950, 1951 and 1952 see 
1298 F<http://www.faqs.org/rfcs/rfc1950.html>,
1299 F<http://www.faqs.org/rfcs/rfc1951.html> and
1300 F<http://www.faqs.org/rfcs/rfc1952.html>
1301
1302 The I<zlib> compression library was written by Jean-loup Gailly
1303 F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
1304
1305 The primary site for the I<zlib> compression library is
1306 F<http://www.zlib.org>.
1307
1308 The primary site for gzip is F<http://www.gzip.org>.
1309
1310
1311
1312
1313 =head1 AUTHOR
1314
1315 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
1316
1317
1318
1319 =head1 MODIFICATION HISTORY
1320
1321 See the Changes file.
1322
1323 =head1 COPYRIGHT AND LICENSE
1324
1325 Copyright (c) 2005-2006 Paul Marquess. All rights reserved.
1326
1327 This program is free software; you can redistribute it and/or
1328 modify it under the same terms as Perl itself.
1329
1330