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