Update Compression modules to version 2.009
Paul Marquess [Sun, 20 Apr 2008 15:54:46 +0000 (16:54 +0100)]
From: "Paul Marquess" <Paul.Marquess@ntlworld.com>
Message-ID: <006601c8a2f6$7d18a200$6501a8c0@myopwv.com>

p4raw-id: //depot/perl@33716

43 files changed:
MANIFEST
ext/Compress/Raw/Zlib/Changes
ext/Compress/Raw/Zlib/README
ext/Compress/Raw/Zlib/Zlib.xs
ext/Compress/Raw/Zlib/lib/Compress/Raw/Zlib.pm
ext/Compress/Raw/Zlib/pod/FAQ.pod [new file with mode: 0644]
ext/Compress/Zlib/Changes
ext/Compress/Zlib/Makefile.PL
ext/Compress/Zlib/README
ext/Compress/Zlib/lib/Compress/Zlib.pm
ext/Compress/Zlib/pod/FAQ.pod [new file with mode: 0644]
ext/IO_Compress_Base/Changes
ext/IO_Compress_Base/README
ext/IO_Compress_Base/lib/File/GlobMapper.pm
ext/IO_Compress_Base/lib/IO/Compress/Base.pm
ext/IO_Compress_Base/lib/IO/Compress/Base/Common.pm
ext/IO_Compress_Base/lib/IO/Uncompress/AnyUncompress.pm
ext/IO_Compress_Base/lib/IO/Uncompress/Base.pm
ext/IO_Compress_Base/pod/FAQ.pod [new file with mode: 0644]
ext/IO_Compress_Base/t/01misc.t
ext/IO_Compress_Zlib/Changes
ext/IO_Compress_Zlib/Makefile.PL
ext/IO_Compress_Zlib/README
ext/IO_Compress_Zlib/lib/IO/Compress/Adapter/Deflate.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Adapter/Identity.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Deflate.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Gzip.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Gzip/Constants.pm
ext/IO_Compress_Zlib/lib/IO/Compress/RawDeflate.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Zip.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Zip/Constants.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Zlib/Constants.pm
ext/IO_Compress_Zlib/lib/IO/Compress/Zlib/Extra.pm
ext/IO_Compress_Zlib/lib/IO/Uncompress/Adapter/Identity.pm
ext/IO_Compress_Zlib/lib/IO/Uncompress/Adapter/Inflate.pm
ext/IO_Compress_Zlib/lib/IO/Uncompress/AnyInflate.pm
ext/IO_Compress_Zlib/lib/IO/Uncompress/Gunzip.pm
ext/IO_Compress_Zlib/lib/IO/Uncompress/Inflate.pm
ext/IO_Compress_Zlib/lib/IO/Uncompress/RawInflate.pm
ext/IO_Compress_Zlib/lib/IO/Uncompress/Unzip.pm
ext/IO_Compress_Zlib/pod/FAQ.pod [new file with mode: 0644]
t/lib/compress/CompTestUtils.pm
t/lib/compress/generic.pl

index 302c771..da2b9ac 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -121,6 +121,7 @@ ext/Compress/Raw/Zlib/fallback/constants.h  Compress::Raw::Zlib
 ext/Compress/Raw/Zlib/fallback/constants.xs    Compress::Raw::Zlib
 ext/Compress/Raw/Zlib/lib/Compress/Raw/Zlib.pm Compress::Raw::Zlib
 ext/Compress/Raw/Zlib/Makefile.PL      Compress::Raw::Zlib
+ext/Compress/Raw/Zlib/pod/FAQ.pod      Compress::Raw::Zlib
 ext/Compress/Raw/Zlib/private/MakeUtil.pm      Compress::Raw::Zlib
 ext/Compress/Raw/Zlib/README           Compress::Raw::Zlib
 ext/Compress/Raw/Zlib/t/01version.t    Compress::Raw::Zlib
@@ -158,6 +159,7 @@ ext/Compress/Zlib/examples/gzgrep   Compress::Zlib
 ext/Compress/Zlib/examples/gzstream    Compress::Zlib
 ext/Compress/Zlib/lib/Compress/Zlib.pm Compress::Zlib
 ext/Compress/Zlib/Makefile.PL          Compress::Zlib
+ext/Compress/Zlib/pod/FAQ.pod  Compress::Zlib
 ext/Compress/Zlib/private/MakeUtil.pm  Compress::Zlib
 ext/Compress/Zlib/README               Compress::Zlib
 ext/Compress/Zlib/t/01version.t                Compress::Zlib
@@ -705,6 +707,7 @@ ext/IO_Compress_Base/lib/IO/Compress/Base.pm        IO::Compress::Base
 ext/IO_Compress_Base/lib/IO/Uncompress/AnyUncompress.pm        IO::Compress::Base
 ext/IO_Compress_Base/lib/IO/Uncompress/Base.pm IO::Compress::Base
 ext/IO_Compress_Base/Makefile.PL       IO::Compress::Base
+ext/IO_Compress_Base/pod/FAQ.pod       IO::Compress::Base
 ext/IO_Compress_Base/private/MakeUtil.pm       IO::Compress::Base
 ext/IO_Compress_Base/README    IO::Compress::Base
 ext/IO_Compress_Base/t/01misc.t        IO::Compress::Base
@@ -733,6 +736,7 @@ ext/IO_Compress_Zlib/lib/IO/Uncompress/Inflate.pm   IO::Compress::Zlib
 ext/IO_Compress_Zlib/lib/IO/Uncompress/RawInflate.pm   IO::Compress::Zlib
 ext/IO_Compress_Zlib/lib/IO/Uncompress/Unzip.pm        IO::Compress::Zlib
 ext/IO_Compress_Zlib/Makefile.PL       IO::Compress::Zlib
+ext/IO_Compress_Zlib/pod/FAQ.pod       IO::Compress::Zlib
 ext/IO_Compress_Zlib/private/MakeUtil.pm       IO::Compress::Zlib
 ext/IO_Compress_Zlib/README    IO::Compress::Zlib
 ext/IO_Compress_Zlib/t/001zlib-generic-deflate.t       IO::Compress::Zlib
index 9cae2af..40c4ecb 100644 (file)
@@ -1,6 +1,10 @@
 CHANGES
 -------
 
+  2.009 20 April 2008
+
+      * No Changes
+
   2.008 2 November 2007
 
       * Minor documentation changes in README
index a296c4a..0a4216d 100644 (file)
@@ -1,16 +1,14 @@
 
                              Compress-Raw-Zlib
 
-                             Version 2.008
+                             Version 2.009
 
-                             2nd November 2007
+                              20th April 2008
 
-
-       Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+       Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
           This program is free software; you can redistribute it
            and/or modify it under the same terms as Perl itself.
 
-
               The directory zlib-src contains a subset of the 
              source files copied directly from zlib version 1.2.3.
                   These files are Copyright(C) 1995-2005
              Full source for the zlib library is available at
                             http://www.zlib.org
 
-
-
 DESCRIPTION
 -----------
 
-
 This module provides a Perl interface to the zlib compression library.  
 
-
-
-
-
 PREREQUISITES
 -------------
 
 Before you can build Compress-Raw-Zlib you need to have the following
 installed on your system:
 
-
     * A C compiler
 
     * Perl 5.004 or better. 
 
-
-
 By default, Compress-Raw-Zlib will build its own private copy of the 
 zlib library. If you want to use a different version of 
 zlib, follow the instructions in the section called 
 "Controlling the version of zlib used by Compress-Raw-Zlib" 
 later in this document.
 
-
-
 BUILDING THE MODULE
 -------------------
 
@@ -61,8 +47,6 @@ using this sequence of commands:
     make
     make test
 
-
-
 INSTALLATION
 ------------
 
@@ -70,9 +54,6 @@ To install Compress-Raw-Zlib, run the command below:
 
     make install
 
-
-
-
 Controlling the version of zlib used by Compress-Raw-Zlib 
 ----------------------------------------------------------
 
@@ -92,7 +73,6 @@ zlib library is used:
 Note that if you intend to use either Option 2 or 3, you need to have
 zlib version 1.0.5 or better.
 
-
 The contents of the file config.in are used to control which of the
 three options is actually used. This file is read during the
 
@@ -101,8 +81,6 @@ three options is actually used. This file is read during the
 step of the build, so remember to make any required changes to config.in
 before building this module.
 
-
-
   Option 1
   --------
   
@@ -169,10 +147,9 @@ Setting the Gzip OS Code
 ------------------------
 
 Every gzip stream stores a byte in its header to identify the Operating
-System that was used to create the gzip stream. When you build
-Compress-Raw-Zlib it will attempt to determine the value that is correct for
-your Operating System. This will then be used by IO::Gzip as the default
-value for the OS byte in all gzip headers it creates. 
+System that was used to create the gzip stream. When you build Compress-Raw-Zlib it will attempt to determine the value that is correct for
+your Operating System. This will then be used by IO::Compress::Gzip as the
+default value for the OS byte in all gzip headers it creates. 
  
 The variable GZIP_OS_CODE in the config.in file controls the setting of
 this value when building Compress-Raw-Zlib. If GZIP_OS_CODE is set to
@@ -197,17 +174,9 @@ If you find you have to change this value, because you think the value auto
 detected is incorrect, please take a few moments to contact the author of
 this module.
 
-
-
 TROUBLESHOOTING
 ---------------
 
-
-
-
-
-
-
 Solaris build fails with "language optional software package not installed"
 ---------------------------------------------------------------------------
 
@@ -245,9 +214,6 @@ may vary.
 If that doesn't work for you, it's time to make changes to the Makefile
 by hand. Good luck!
 
-
-
-
 Solaris build fails with "gcc: unrecognized option `-KPIC'"
 -----------------------------------------------------------
 
@@ -285,10 +251,6 @@ I've had a report that when building Compress-Raw-Zlib under HP-UX that it
 is necessary to have first built the zlib library with the -fpic
 option.
 
-
-
-
-
 Linux Notes
 -----------
 
@@ -307,9 +269,6 @@ This usually means that you have not installed the development RPM
 for zlib. Check for an RPM that start with "zlib-devel" in your Linux
 distribution.
 
-
-
-
 Win32 Notes
 -----------
 
@@ -320,13 +279,9 @@ prompt
 
     C:\> ppm verify -upgrade Compress-Zlib
 
-
 If you are not running Activestate Perl and you don't have access
 to a C compiler, you will not be able to build and install this module.
 
-
-
-
 Win32 & Cygwin Notes
 --------------------
 
@@ -338,7 +293,6 @@ Windows.
 The workaround is to install Compress-Raw-Zlib manually using the
 instructions given at the start of this file.
 
-
 FEEDBACK
 --------
 
@@ -372,8 +326,7 @@ To help me help you, I need all of the following information:
         If you haven't installed Compress-Raw-Zlib then search Compress::Raw::Zlib.pm
         for a line like this:
 
-          $VERSION = "2.008" ;
-
+          $VERSION = "2.009" ;
 
      c. The version of zlib you have used.
         If you have successfully installed Compress-Raw-Zlib, this one-liner
@@ -381,10 +334,8 @@ To help me help you, I need all of the following information:
 
           perl -MCompress::Raw::Zlib -e "print q[zlib ver ]. Compress::Raw::Zlib::ZLIB_VERSION.qq[\n]" 
 
-
         If not, look at the beginning of the file zlib.h. 
 
-
  2. If you are having problems building Compress-Raw-Zlib, send me a
     complete log of what happened. Start by unpacking the Compress-Raw-Zlib
     module into a fresh directory and keep a log of all the steps
@@ -394,5 +345,4 @@ To help me help you, I need all of the following information:
         make
         make test TEST_VERBOSE=1          
 
-
 Paul Marquess <pmqs@cpan.org>
index 2e27f8e..aee174e 100644 (file)
@@ -228,7 +228,8 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ;
 #define adlerInitial adler32(0L, Z_NULL, 0)
 #define crcInitial crc32(0L, Z_NULL, 0)
 
-static const char * const my_z_errmsg[] = {
+//static const char * const my_z_errmsg[] = {
+static const char my_z_errmsg[][32] = {
     "need dictionary",     /* Z_NEED_DICT     2 */
     "stream end",          /* Z_STREAM_END    1 */
     "",                    /* Z_OK            0 */
index 9836740..7eb8915 100644 (file)
@@ -13,7 +13,7 @@ use warnings ;
 use bytes ;
 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $XS_VERSION = $VERSION; 
 $VERSION = eval $VERSION;
 
@@ -568,8 +568,6 @@ The I<Compress::Raw::Zlib> module provides a Perl interface to the I<zlib>
 compression library (see L</AUTHOR> for details about where to get
 I<zlib>). 
 
-
-
 =head1 Compress::Raw::Zlib::Deflate
 
 This section defines an interface that allows in-memory compression using
@@ -577,7 +575,6 @@ the I<deflate> interface provided by zlib.
 
 Here is a definition of the interface available:
 
-
 =head2 B<($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) >
 
 Initialises a deflation object. 
@@ -678,7 +675,6 @@ calculated. Use the C<$d-E<gt>crc32> method to retrieve this value.
 
 This option defaults to false.
 
-
 =item B<-ADLER32>
 
 If set to true, an adler32 checksum of the uncompressed data will be
@@ -686,7 +682,6 @@ calculated. Use the C<$d-E<gt>adler32> method to retrieve this value.
 
 This option defaults to false.
 
-
 =back
 
 Here is an example of using the C<Compress::Raw::Zlib::Deflate> optional
@@ -696,7 +691,6 @@ level. All other options will take their default values.
     my $d = new Compress::Raw::Zlib::Deflate ( -Bufsize => 300, 
                                                -Level   => Z_BEST_SPEED ) ;
 
-
 =head2 B<$status = $d-E<gt>deflate($input, $output)>
 
 Deflates the contents of C<$input> and writes the compressed data to
@@ -751,7 +745,6 @@ Change settings for the deflate object C<$d>.
 The list of the valid options is shown below. Options not specified
 will remain unchanged.
 
-
 =over 5
 
 =item B<-Level>
@@ -772,7 +765,6 @@ and C<$d-E<gt>flush> methods. If the buffer has to be
 reallocated to increase the size, it will grow in increments of
 C<Bufsize>.
 
-
 =back
 
 =head2 B<$status = $d-E<gt>deflateTune($good_length, $max_lazy, $nice_length, $max_chain)>
@@ -815,7 +807,6 @@ Returns the total number of compressed bytes output from deflate.
 Returns the deflation strategy currently used. Valid values are
 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>. 
 
-
 =head2 B<$d-E<gt>get_Level()>
 
 Returns the compression level being used. 
@@ -826,7 +817,6 @@ Returns the buffer size used to carry out the compression.
 
 =head2 Example
 
-
 Here is a trivial example of using C<deflate>. It simply reads standard
 input, deflates it and writes it to standard output.
 
@@ -865,7 +855,6 @@ the I<inflate> interface provided by zlib.
 
 Here is a definition of the interface:
 
-
 =head2 B< ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) >
 
 Initialises an inflation object. 
@@ -928,7 +917,6 @@ output buffer by the C<$i-E<gt>inflate> method.
 
 This option defaults to false.
 
-
 =item B<-CRC32>
 
 If set to true, a crc32 checksum of the uncompressed data will be
@@ -1048,7 +1036,6 @@ Note I<full flush points> are not present by default in compressed
 data streams. They must have been added explicitly when the data stream
 was created by calling C<Compress::Deflate::flush>  with C<Z_FULL_FLUSH>.
 
-
 =head2 B<$i-E<gt>dict_adler()>
 
 Returns the adler32 value for the dictionary.
@@ -1143,13 +1130,11 @@ the hard work for you. Check out the C<Archive::Zip> module on CPAN at
 
     http://www.cpan.org/modules/by-module/Archive/Archive-Zip-*.tar.gz    
 
-
 =head1 CONSTANTS
 
 All the I<zlib> constants are automatically imported when you make use
 of I<Compress::Raw::Zlib>.
 
-
 =head1 SEE ALSO
 
 L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
@@ -1160,7 +1145,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1174,25 +1158,18 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
-
diff --git a/ext/Compress/Raw/Zlib/pod/FAQ.pod b/ext/Compress/Raw/Zlib/pod/FAQ.pod
new file mode 100644 (file)
index 0000000..0a78bbb
--- /dev/null
@@ -0,0 +1,142 @@
+
+=head1 NAME
+
+Compress::Raw::Zlib::FAQ -- Frequently Asked Questions about Compress::Raw::Zlib
+
+=head1 DESCRIPTION
+
+Common questions answered.
+
+=head2 Compatibility with Unix compress/uncompress.
+
+This module is not compatible with Unix C<compress>.
+
+If you have the C<uncompress> program available, you can use this to read
+compressed files
+
+    open F, "uncompress -c $filename |";
+    while (<F>)
+    {
+        ...
+
+Alternatively, if you have the C<gunzip> program available, you can use
+this to read compressed files
+
+    open F, "gunzip -c $filename |";
+    while (<F>)
+    {
+        ...
+
+and this to write compress files, if you have the C<compress> program
+available
+
+    open F, "| compress -c $filename ";
+    print F "data";
+    ...
+    close F ;
+
+=head2 Accessing .tar.Z files
+
+See previous FAQ item.
+
+If the C<Archive::Tar> module is installed and either the C<uncompress> or
+C<gunzip> programs are available, you can use one of these workarounds to
+read C<.tar.Z> files.
+
+Firstly with C<uncompress>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "uncompress -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+and this with C<gunzip>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "gunzip -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+Similarly, if the C<compress> program is available, you can use this to
+write a C<.tar.Z> file
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+    use IO::File;
+
+    my $fh = new IO::File "| compress -c >$filename";
+    my $tar = Archive::Tar->new();
+    ...
+    $tar->write($fh);
+    $fh->close ;
+
+=head2 Accessing Zip Files
+
+This module does not support reading/writing zip files.
+
+Support for reading/writing zip files is included with the
+C<IO::Compress::Zip> and C<IO::Uncompress::Unzip> modules.
+
+The primary focus of the C<IO::Compress::Zip> and C<IO::Uncompress::Unzip>
+modules is to provide an C<IO::File> compatible streaming read/write
+interface to zip files/buffers. They are not fully flegged archivers. If
+you are looking for an archiver check out the C<Archive::Zip> module. You
+can find it on CPAN at 
+
+    http://www.cpan.org/modules/by-module/Archive/Archive-Zip-*.tar.gz    
+
+=head2 Zlib Library Version Support
+
+By default C<Compress::Raw::Zlib> will build with a private copy of version
+1.2.3 of the zlib library. (See the F<README> file for details of
+how to override this behaviour)
+
+If you decide to use a different version of the zlib library, you need to be
+aware of the following issues
+
+=over 5
+
+=item *
+
+First off, you must have zlib 1.0.5 or better.
+
+=item *
+
+You need to have zlib 1.2.1 or better if you want to use the C<-Merge>
+option with C<IO::Compress::Gzip>, C<IO::Compress::Deflate> and
+C<IO::Compress::RawDeflate>.
+
+=back
+
+=head1 SEE ALSO
+
+L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
+
+L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
+
+L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
+L<Archive::Tar|Archive::Tar>,
+L<IO::Zlib|IO::Zlib>
+
+=head1 AUTHOR
+
+This module was written by Paul Marquess, F<pmqs@cpan.org>. 
+
+=head1 MODIFICATION HISTORY
+
+See the Changes file.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
index 835a47d..c62b1bc 100644 (file)
@@ -1,6 +1,11 @@
 CHANGES
 -------
 
+  2.009 20 April 2008
+
+      * Minor documentation issue with flush.
+        [rt.cpan.org #31446]
+
   2.008 2 November 2007
 
       * Minor documentation changes in README
index 5855218..d7d5bb1 100755 (executable)
@@ -3,7 +3,7 @@
 use strict ;
 require 5.004 ;
 
-$::VERSION = '2.008' ;
+$::VERSION = '2.009' ;
 
 use private::MakeUtil;
 use ExtUtils::MakeMaker 5.16 ;
index 8fd701b..47b634e 100644 (file)
@@ -1,43 +1,29 @@
 
                              Compress-Zlib
 
-                             Version 2.008
+                             Version 2.009
 
-                             2nd November 2007
+                              20th April 2008
 
-
-       Copyright (c) 1995-2007 Paul Marquess. All rights reserved.
+       Copyright (c) 1995-2008 Paul Marquess. All rights reserved.
           This program is free software; you can redistribute it
            and/or modify it under the same terms as Perl itself.
 
-
-
-
 DESCRIPTION
 -----------
 
-
 This module provides a Perl interface to the zlib compression library.  
 
-
-
-
-
 PREREQUISITES
 -------------
 
 Before you can build Compress-Zlib you need to have the following
 installed on your system:
 
-
     * Perl 5.004 or better. 
     * Compress::Raw::Zlib
     * IO::Compress::Gzip
 
-
-
-
-
 BUILDING THE MODULE
 -------------------
 
@@ -48,8 +34,6 @@ using this sequence of commands:
     make
     make test
 
-
-
 INSTALLATION
 ------------
 
@@ -57,14 +41,9 @@ To install Compress-Zlib, run the command below:
 
     make install
 
-
-
-
-
 TROUBLESHOOTING
 ---------------
 
-
 Undefined Symbol gzsetparams
 ----------------------------
 
@@ -82,8 +61,6 @@ There are two ways to fix this problem:
 
     2. Edit config.in and set the OLD_ZLIB variable to True.
 
-
-
 Test Harness 01version fails
 ----------------------------
 If the 01version test harness fails, and the problem isn't covered by the
@@ -96,14 +73,6 @@ Run the command below to see if this is indeed the case
 
 Try removing the one you don't want to use and rebuild.   
 
-
-
-
-
-
-
-
-
 FEEDBACK
 --------
 
@@ -137,9 +106,7 @@ To help me help you, I need all of the following information:
         If you haven't installed Compress-Zlib then search Compress::Zlib.pm
         for a line like this:
 
-          $VERSION = "2.008" ;
-
-
+          $VERSION = "2.009" ;
 
  2. If you are having problems building Compress-Zlib, send me a
     complete log of what happened. Start by unpacking the Compress-Zlib
@@ -150,5 +117,4 @@ To help me help you, I need all of the following information:
         make
         make test TEST_VERBOSE=1          
 
-
 Paul Marquess <pmqs@cpan.org>
index 9e02746..eff5491 100644 (file)
@@ -8,17 +8,17 @@ use Carp ;
 use IO::Handle ;
 use Scalar::Util qw(dualvar);
 
-use IO::Compress::Base::Common 2.008 ;
-use Compress::Raw::Zlib 2.008 ;
-use IO::Compress::Gzip 2.008 ;
-use IO::Uncompress::Gunzip 2.008 ;
+use IO::Compress::Base::Common 2.009 ;
+use Compress::Raw::Zlib 2.009 ;
+use IO::Compress::Gzip 2.009 ;
+use IO::Uncompress::Gunzip 2.009 ;
 
 use strict ;
 use warnings ;
 use bytes ;
 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $XS_VERSION = $VERSION; 
 $VERSION = eval $VERSION;
 
@@ -452,7 +452,7 @@ sub inflate
 
 package Compress::Zlib ;
 
-use IO::Compress::Gzip::Constants 2.008 ;
+use IO::Compress::Gzip::Constants 2.009 ;
 
 sub memGzip($)
 {
@@ -583,7 +583,7 @@ Compress::Zlib - Interface to zlib compression library
 
     ($d, $status) = deflateInit( [OPT] ) ;
     $status = $d->deflate($input, $output) ;
-    $status = $d->flush($output [, $flush_type]) ;
+    $status = $d->flush([$flush_type]) ;
     $d->deflateParams(OPTS) ;
     $d->deflateTune(OPTS) ;
     $d->dict_adler() ;
@@ -635,8 +635,6 @@ Compress::Zlib - Interface to zlib compression library
     ZLIB_VERSION
     ZLIB_VERNUM
 
-
-
 =head1 DESCRIPTION
 
 The I<Compress::Zlib> module provides a Perl interface to the I<zlib>
@@ -808,7 +806,6 @@ documentation for details.
 
 Returns 0 on success.
 
-
 =item B<$offset = $gz-E<gt>gztell() ;>
 
 Returns the uncompressed file offset.
@@ -893,7 +890,6 @@ be used safely.
 
 =back
 
-
 =head2 Examples
 
 Here is an example script which uses the interface. It implements a
@@ -1022,7 +1018,6 @@ The C<$level> parameter defines the compression level. Valid values are
 C<Z_BEST_COMPRESSION>, and C<Z_DEFAULT_COMPRESSION>.
 If C<$level> is not specified C<Z_DEFAULT_COMPRESSION> will be used.
 
-
 =item B<$dest = uncompress($source) ;>
 
 Uncompresses C<$source>. If successful it returns the uncompressed
@@ -1039,7 +1034,6 @@ See L<IO::Deflate|IO::Deflate> and L<IO::Inflate|IO::Inflate> included with
 this distribution for an alternative interface for reading/writing RFC 1950
 files/buffers.
 
-
 =head1 Deflate Interface
 
 This section defines an interface that allows in-memory compression using
@@ -1047,7 +1041,6 @@ the I<deflate> interface provided by zlib.
 
 Here is a definition of the interface available:
 
-
 =head2 B<($d, $status) = deflateInit( [OPT] )>
 
 Initialises a deflation stream. 
@@ -1140,10 +1133,8 @@ options will take their default values.
     deflateInit( -Bufsize => 300, 
                  -Level => Z_BEST_SPEED  ) ;
 
-
 =head2 B<($out, $status) = $d-E<gt>deflate($buffer)>
 
-
 Deflates the contents of C<$buffer>. The buffer can either be a scalar
 or a scalar reference.  When finished, C<$buffer> will be
 completely processed (assuming there were no errors). If the deflation
@@ -1159,8 +1150,8 @@ As with the I<deflate> function in I<zlib>, it is not necessarily the
 case that any output will be produced by this method. So don't rely on
 the fact that C<$out> is empty for an error test.
 
-
-=head2 B<($out, $status) = $d-E<gt>flush([flush_type])>
+=head2 B<($out, $status) = $d-E<gt>flush()>
+=head2 B<($out, $status) = $d-E<gt>flush($flush_type)>
 
 Typically used to finish the deflation. Any pending output will be
 returned via C<$out>.
@@ -1218,7 +1209,6 @@ Returns the total number of compressed bytes output from deflate.
 
 =head2 Example
 
-
 Here is a trivial example of using C<deflate>. It simply reads standard
 input, deflates it and writes it to standard output.
 
@@ -1257,7 +1247,6 @@ uncompression using the I<deflate> interface provided by zlib.
 
 Here is a definition of the interface:
 
-
 =head2 B<($i, $status) = inflateInit()>
 
 Initialises an inflation stream. 
@@ -1349,7 +1338,6 @@ Any other return code means that a flush point was not found. If more
 data is available, C<inflateSync> can be called repeatedly with more
 compressed data until the flush point is found.
 
-
 =head2 B<$i-E<gt>dict_adler()>
 
 Returns the adler32 value for the dictionary.
@@ -1423,7 +1411,6 @@ These functions allow checksums to be merged.
 All the I<zlib> constants are automatically imported when you make use
 of I<Compress::Zlib>.
 
-
 =head1 SEE ALSO
 
 L<IO::Compress::Gzip>, 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>
@@ -1434,7 +1421,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1448,25 +1434,18 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 1995-2007 Paul Marquess. All rights reserved.
+Copyright (c) 1995-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
-
diff --git a/ext/Compress/Zlib/pod/FAQ.pod b/ext/Compress/Zlib/pod/FAQ.pod
new file mode 100644 (file)
index 0000000..d590412
--- /dev/null
@@ -0,0 +1,125 @@
+
+=head1 NAME
+
+Compress::Zlib::FAQ -- Frequently Asked Questions about Compress::Zlib
+
+=head1 DESCRIPTION
+
+Common questions answered.
+
+=head2 Compatibility with Unix compress/uncompress.
+
+Although C<Compress::Zlib> has a pair of functions called C<compress> and
+C<uncompress>, they are I<not> related to the Unix programs of the same
+name. The C<Compress::Zlib> module is not compatible with Unix
+C<compress>.
+
+If you have the C<uncompress> program available, you can use this to read
+compressed files
+
+    open F, "uncompress -c $filename |";
+    while (<F>)
+    {
+        ...
+
+Alternatively, if you have the C<gunzip> program available, you can use
+this to read compressed files
+
+    open F, "gunzip -c $filename |";
+    while (<F>)
+    {
+        ...
+
+and this to write compress files, if you have the C<compress> program
+available
+
+    open F, "| compress -c $filename ";
+    print F "data";
+    ...
+    close F ;
+
+=head2 Accessing .tar.Z files
+
+The C<Archive::Tar> module can optionally use C<Compress::Zlib> (via the
+C<IO::Zlib> module) to access tar files that have been compressed with
+C<gzip>. Unfortunately tar files compressed with the Unix C<compress>
+utility cannot be read by C<Compress::Zlib> and so cannot be directly
+accessed by C<Archive::Tar>.
+
+If the C<uncompress> or C<gunzip> programs are available, you can use one
+of these workarounds to read C<.tar.Z> files from C<Archive::Tar>
+
+Firstly with C<uncompress>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "uncompress -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+and this with C<gunzip>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "gunzip -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+Similarly, if the C<compress> program is available, you can use this to
+write a C<.tar.Z> file
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+    use IO::File;
+
+    my $fh = new IO::File "| compress -c >$filename";
+    my $tar = Archive::Tar->new();
+    ...
+    $tar->write($fh);
+    $fh->close ;
+
+=head2 Accessing Zip Files
+
+This module does not support reading/writing zip files.
+
+Support for reading/writing zip files is included with the
+C<IO::Compress::Zip> and C<IO::Uncompress::Unzip> modules.
+
+The primary focus of the C<IO::Compress::Zip> and C<IO::Uncompress::Unzip>
+modules is to provide an C<IO::File> compatible streaming read/write
+interface to zip files/buffers. They are not fully flegged archivers. If
+you are looking for an archiver check out the C<Archive::Zip> module. You
+can find it on CPAN at 
+
+    http://www.cpan.org/modules/by-module/Archive/Archive-Zip-*.tar.gz    
+
+=head1 SEE ALSO
+
+L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
+
+L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
+
+L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
+L<Archive::Tar|Archive::Tar>,
+L<IO::Zlib|IO::Zlib>
+
+=head1 AUTHOR
+
+This module was written by Paul Marquess, F<pmqs@cpan.org>. 
+
+=head1 MODIFICATION HISTORY
+
+See the Changes file.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
index 13803d1..5a00b59 100644 (file)
@@ -1,6 +1,32 @@
 CHANGES
 -------
 
+  2.009 20 April 2008
+
+      * Removed the alpha status from File::GlobMapper
+      
+      * IO::Compress::Base 
+        When writing output never output a zero length buffer.
+        Done to improve interoperability with other tied filenandle
+        modules.
+
+      * Changed IO::Uncompress::Base to not use the offset parameter of
+        the read method when reading from a filehandle. 
+
+        The object returned from Net::FTP::retr implements a non-standard
+        read method. The third parameter is used for a timeout value
+        rather than an offset.  
+        [rt.cpan#33231]
+        
+      * Changed IO::Uncompress::Base to not use the eof method when
+        reading from a filehandle. 
+
+        The object returned from Net::FTP::retr implements both the read
+        method and the eof method. Unfortunately the implementation of
+        the read method uses non-buffered IO (by using sysread) while
+        the eof method uses buffered IO. Mixing buffered and non-buffered
+        IO results in data corruption.
+
   2.008 2 November 2007
 
       * Minor documentation changes in README
index 2f71ec4..2ac1712 100644 (file)
@@ -1,42 +1,28 @@
 
                              IO-Compress-Base
 
-                             Version 2.008
+                             Version 2.009
 
-                             2nd November 2007
+                              20th April 2008
 
-
-       Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+       Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
           This program is free software; you can redistribute it
            and/or modify it under the same terms as Perl itself.
 
-
-
-
 DESCRIPTION
 -----------
 
-
 This module is the base class for all IO::Compress and IO::Uncompress
 modules.
 
-
-
-
-
 PREREQUISITES
 -------------
 
 Before you can build IO-Compress-Base you need to have the following
 installed on your system:
 
-
     * Perl 5.004 or better. 
 
-
-
-
-
 BUILDING THE MODULE
 -------------------
 
@@ -47,8 +33,6 @@ using this sequence of commands:
     make
     make test
 
-
-
 INSTALLATION
 ------------
 
@@ -56,24 +40,9 @@ To install IO-Compress-Base, run the command below:
 
     make install
 
-
-
-
-
 TROUBLESHOOTING
 ---------------
 
-
-
-
-
-
-
-
-
-
-
-
 FEEDBACK
 --------
 
@@ -107,9 +76,7 @@ To help me help you, I need all of the following information:
         If you haven't installed IO-Compress-Base then search IO::Compress::Base.pm
         for a line like this:
 
-          $VERSION = "2.008" ;
-
-
+          $VERSION = "2.009" ;
 
  2. If you are having problems building IO-Compress-Base, send me a
     complete log of what happened. Start by unpacking the IO-Compress-Base
@@ -120,5 +87,4 @@ To help me help you, I need all of the following information:
         make
         make test TEST_VERBOSE=1          
 
-
 Paul Marquess <pmqs@cpan.org>
index 9e7c217..40a6063 100644 (file)
@@ -26,7 +26,7 @@ BEGIN
 our ($Error);
 
 our ($VERSION, @EXPORT_OK);
-$VERSION = '0.000_02';
+$VERSION = '1.000';
 @EXPORT_OK = qw( globmap );
 
 
@@ -389,24 +389,6 @@ File::GlobMapper - Extend File Glob to Allow Input and Output Files
 
 =head1 DESCRIPTION
 
-B<WARNING Alpha Release Alert!> 
-
-=over 5
-
-=item * This code is a work in progress. 
-
-=item * There are known bugs. 
-
-=item * The interface defined here is tentative. 
-
-=item * There are portability issues. 
-
-=item * Do not use in production code.
-
-=item * Consider yourself warned!
-
-=back
-
 This module needs Perl5.005 or better.
 
 This module takes the existing C<File::Glob> module as a starting point and
index c77be0d..cbd8d25 100644 (file)
@@ -6,7 +6,7 @@ require 5.004 ;
 use strict ;
 use warnings;
 
-use IO::Compress::Base::Common 2.008 ;
+use IO::Compress::Base::Common 2.009 ;
 
 use IO::File ;
 use Scalar::Util qw(blessed readonly);
@@ -20,7 +20,7 @@ use bytes;
 our (@ISA, $VERSION);
 @ISA    = qw(Exporter IO::File);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 #Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16.
 
@@ -120,12 +120,14 @@ sub output
         &{ *$self->{FilterEnvelope} }();
     }
 
-    if ( defined *$self->{FH} ) {
-        defined *$self->{FH}->write( $data, length $data )
-          or return $self->saveErrorString(0, $!, $!); 
-    }
-    else {
-        ${ *$self->{Buffer} } .= $data ;
+    if (length $data) {
+        if ( defined *$self->{FH} ) {
+                defined *$self->{FH}->write( $data, length $data )
+                or return $self->saveErrorString(0, $!, $!); 
+        }
+        else {
+                ${ *$self->{Buffer} } .= $data ;
+        }
     }
 
     return 1;
@@ -939,23 +941,17 @@ __END__
 
 =head1 NAME
 
-
 IO::Compress::Base - Base Class for IO::Compress modules 
 
-
 =head1 SYNOPSIS
 
     use IO::Compress::Base ;
 
 =head1 DESCRIPTION
 
-
 This module is not intended for direct use in application code. Its sole
 purpose if to to be sub-classed by IO::Compress modules.
 
-
-
-
 =head1 SEE ALSO
 
 L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
@@ -966,25 +962,18 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
index ddd2335..8f4a5d0 100644 (file)
@@ -11,7 +11,7 @@ use File::GlobMapper;
 require Exporter;
 our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE);
 @ISA = qw(Exporter);
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 @EXPORT = qw( isaFilehandle isaFilename whatIsInput whatIsOutput 
               isaFileGlobString cleanFileGlobString oneTarget
@@ -545,6 +545,9 @@ sub IO::Compress::Base::Parameters::parse
     }
     elsif (@_ == 1) {
         my $href = $_[0] ;    
+        return $_[0] 
+            if UNIVERSAL::isa($_[0], "IO::Compress::Base::Parameters");
+    
         return $self->setError("Expected even number of parameters, got 1")
             if ! defined $href or ! ref $href or ref $href ne "HASH" ;
  
index 998de37..0553ab0 100644 (file)
@@ -4,16 +4,16 @@ use strict;
 use warnings;
 use bytes;
 
-use IO::Compress::Base::Common 2.008 qw(createSelfTiedObject);
+use IO::Compress::Base::Common 2.009 qw(createSelfTiedObject);
 
-use IO::Uncompress::Base 2.008 ;
+use IO::Uncompress::Base 2.009 ;
 
 
 require Exporter ;
 
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyUncompressError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $AnyUncompressError = '';
 
 @ISA = qw( Exporter IO::Uncompress::Base );
@@ -27,18 +27,18 @@ Exporter::export_ok_tags('all');
 
 BEGIN
 {
-   eval ' use IO::Uncompress::Adapter::Inflate 2.008 ;';
-   eval ' use IO::Uncompress::Adapter::Bunzip2 2.008 ;';
-   eval ' use IO::Uncompress::Adapter::LZO 2.008 ;';
-   eval ' use IO::Uncompress::Adapter::Lzf 2.008 ;';
-
-   eval ' use IO::Uncompress::Bunzip2 2.008 ;';
-   eval ' use IO::Uncompress::UnLzop 2.008 ;';
-   eval ' use IO::Uncompress::Gunzip 2.008 ;';
-   eval ' use IO::Uncompress::Inflate 2.008 ;';
-   eval ' use IO::Uncompress::RawInflate 2.008 ;';
-   eval ' use IO::Uncompress::Unzip 2.008 ;';
-   eval ' use IO::Uncompress::UnLzf 2.008 ;';
+   eval ' use IO::Uncompress::Adapter::Inflate 2.009 ;';
+   eval ' use IO::Uncompress::Adapter::Bunzip2 2.009 ;';
+   eval ' use IO::Uncompress::Adapter::LZO 2.009 ;';
+   eval ' use IO::Uncompress::Adapter::Lzf 2.009 ;';
+
+   eval ' use IO::Uncompress::Bunzip2 2.009 ;';
+   eval ' use IO::Uncompress::UnLzop 2.009 ;';
+   eval ' use IO::Uncompress::Gunzip 2.009 ;';
+   eval ' use IO::Uncompress::Inflate 2.009 ;';
+   eval ' use IO::Uncompress::RawInflate 2.009 ;';
+   eval ' use IO::Uncompress::Unzip 2.009 ;';
+   eval ' use IO::Uncompress::UnLzf 2.009 ;';
 }
 
 sub new
@@ -56,7 +56,7 @@ sub anyuncompress
 
 sub getExtraParams
 {
-    use IO::Compress::Base::Common 2.008 qw(:Parse);
+    use IO::Compress::Base::Common 2.009 qw(:Parse);
     return ( 'RawInflate' => [1, 1, Parse_boolean,  0] ) ;
 }
 
@@ -188,10 +188,8 @@ __END__
 
 =head1 NAME
 
-
 IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop file/buffer
 
-
 =head1 SYNOPSIS
 
     use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ;
@@ -235,10 +233,8 @@ IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop file/buffer
     eof($z)
     close($z)
 
-
 =head1 DESCRIPTION
 
-
 This module provides a Perl interface that allows the reading of
 files/buffers that have been compressed with a variety of compression
 libraries.
@@ -266,9 +262,6 @@ The formats supported are:
 The module will auto-detect which, if any, of the supported
 compression formats is being used.
 
-
-
-
 =head1 Functional Interface
 
 A top-level function, C<anyuncompress>, is provided to carry out
@@ -281,14 +274,10 @@ section.
     anyuncompress $input => $output [,OPTS] 
         or die "anyuncompress failed: $AnyUncompressError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 anyuncompress $input => $output [, OPTS]
 
-
 C<anyuncompress> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -327,8 +316,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is uncompressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -339,13 +326,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -365,14 +349,11 @@ If the C<$output> parameter is a filehandle, the uncompressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the uncompressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the uncompressed data will be
@@ -391,20 +372,13 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
 When C<$input> maps to multiple compressed files/buffers and C<$output> is
 a single file/buffer, after uncompression C<$output> will contain a
 concatenation of all the uncompressed data from each of the input
 files/buffers.
 
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<anyuncompress>,
@@ -424,7 +398,6 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeOut => 0|1 >>
 
 When writing to a file or filehandle, set C<binmode> before writing to the
@@ -432,26 +405,17 @@ file.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
 =item C<< MultiStream => 0|1 >>
 
-
 If the input file/buffer contains multiple compressed data streams, this
 option will uncompress the whole lot as a single data stream.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< TrailingData => $scalar >>
 
 Returns the data, if any, that is present immediately after the compressed
@@ -471,19 +435,12 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option.
 
-
-
 =back
 
-
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt.Compressed> and write the
@@ -498,7 +455,6 @@ compressed data to the file C<file1.txt>.
     anyuncompress $input => $output
         or die "anyuncompress failed: $AnyUncompressError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 uncompressed data to a buffer, C<$buffer>.
 
@@ -542,7 +498,6 @@ and if you want to compress each file one at a time, this will do the trick
 
 The format of the constructor for IO::Uncompress::AnyUncompress is shown below
 
-
     my $z = new IO::Uncompress::AnyUncompress $input [OPTS]
         or die "IO::Uncompress::AnyUncompress failed: $AnyUncompressError\n";
 
@@ -574,7 +529,6 @@ If the C<$input> parameter is a filehandle, the compressed data will be
 read from it.
 The string '-' can be used as an alias for standard input.
 
-
 =item A scalar reference 
 
 If C<$input> is a scalar reference, the compressed data will be read from
@@ -584,7 +538,6 @@ C<$$output>.
 
 =head2 Constructor Options
 
-
 The option names defined below are case insensitive and can be optionally
 prefixed by a '-'.  So all of the following are valid
 
@@ -608,8 +561,6 @@ This parameter defaults to 0.
 
 =item C<< MultiStream => 0|1 >>
 
-
-
 Allows multiple concatenated compressed streams to be treated as a single
 compressed stream. Decompression will stop once either the end of the
 file/buffer is reached, an error is encountered (premature eof, corrupt
@@ -618,7 +569,6 @@ start of another stream.
 
 This parameter defaults to 0.
 
-
 =item C<< Prime => $string >>
 
 This option will uncompress the contents of C<$string> before processing the
@@ -660,8 +610,6 @@ This option is mostly used when reading from a filehandle, in which case
 the file pointer will be left pointing to the first byte directly after the
 compressed data stream.
 
-
-
 This option defaults to off.
 
 =item C<< Append => 0|1 >>
@@ -678,24 +626,12 @@ Defaults to 0.
 
 =item C<< Strict => 0|1 >>
 
-
-
 This option controls whether the extra checks defined below are used when
 carrying out the decompression. When Strict is on, the extra tests are
 carried out, when Strict is off they are not.
 
 The default for this option is off.
 
-
-
-
-
-
-
-
-
-
-
 =item C<< RawInflate => 0|1 >>
 
 When auto-detecting the compressed format, try to test for raw-deflate (RFC
@@ -707,11 +643,6 @@ prone and can result is false positives.
 
 Defaults to 0.
 
-
-
-
-
-
 =back
 
 =head2 Examples
@@ -755,7 +686,6 @@ or an IO error is encountered.
 Returns the number of uncompressed bytes written to C<$buffer>, zero if eof
 or a negative number on error.
 
-
 =head2 getline
 
 Usage is
@@ -770,7 +700,6 @@ C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to
 determine what constitutes an end of line. Paragraph mode, record mode and
 file slurp mode are all supported. 
 
-
 =head2 getc
 
 Usage is 
@@ -785,9 +714,6 @@ Usage is
 
     $char = $z->ungetc($string)
 
-
-
-
 =head2 getHeaderInfo
 
 Usage is
@@ -799,9 +725,6 @@ This method returns either a hash reference (in scalar context) or a list
 or hash references (in array context) that contains information about each
 of the header fields in the compressed data stream(s).
 
-
-
-
 =head2 tell
 
 Usage is
@@ -818,26 +741,17 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the end of the compressed input stream has been reached.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the input file/buffer.
 It is a fatal error to attempt to seek backward.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -879,8 +793,6 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
-
 Returns the current uncompressed line number. If C<EXPR> is present it has
 the effect of setting the line number. Note that setting the line number
 does not change the current position within the file/buffer being read.
@@ -888,30 +800,25 @@ does not change the current position within the file/buffer being read.
 The contents of C<$/> are used to to determine what constitutes a line
 terminator.
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Uncompress::AnyUncompress object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -930,9 +837,6 @@ If the C<AutoClose> option has been enabled when the IO::Uncompress::AnyUncompre
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 nextStream
 
 Usage is
@@ -971,8 +875,6 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option in the constructor.
@@ -994,9 +896,6 @@ Same as doing this
 
 =head1 EXAMPLES
 
-
-
-
 =head1 SEE ALSO
 
 L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
@@ -1007,23 +906,17 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
index f4ab1e4..110cde3 100644 (file)
@@ -9,12 +9,12 @@ our (@ISA, $VERSION, @EXPORT_OK, %EXPORT_TAGS);
 @ISA    = qw(Exporter IO::File);
 
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 use constant G_EOF => 0 ;
 use constant G_ERR => -1 ;
 
-use IO::Compress::Base::Common 2.008 ;
+use IO::Compress::Base::Common 2.009 ;
 #use Parse::Parameters ;
 
 use IO::File ;
@@ -28,6 +28,7 @@ push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
 #Exporter::export_ok_tags('all') ;
 
 
+
 sub smartRead
 {
     my $self = $_[0];
@@ -59,12 +60,21 @@ sub smartRead
 
     my $get_size = $size - $offset ;
 
-    #if ( defined *$self->{InputLength} ) {
-    #    $get_size = min($get_size, *$self->{InputLengthRemaining});
-    #}
-
-    if (defined *$self->{FH})
-      { *$self->{FH}->read($$out, $get_size, $offset) }
+    if (defined *$self->{FH}) {
+        if ($offset) {
+            # Not using this 
+            #
+            #  *$self->{FH}->read($$out, $get_size, $offset);
+            #
+            # because the filehandle may not support the offset parameter
+            # An example is Net::FTP
+            my $tmp = '';
+            *$self->{FH}->read($tmp, $get_size) > 0 &&
+                (substr($$out, $offset) = $tmp);
+        }
+        else
+          { *$self->{FH}->read($$out, $get_size) }
+    }
     elsif (defined *$self->{InputEvent}) {
         my $got = 1 ;
         while (length $$out < $size) {
@@ -174,7 +184,24 @@ sub smartEof
     return 0 if length *$self->{Prime} || *$self->{PushMode};
 
     if (defined *$self->{FH})
-     { *$self->{FH}->eof() }
+    {
+        # Could use
+        #
+        #  *$self->{FH}->eof() 
+        #
+        # here, but this can cause trouble if
+        # the filehandle is itself a tied handle, but it uses sysread.
+        # Then we get into mixing buffered & non-buffered IO, which will cause trouble
+
+        my $info = $self->getErrInfo();
+        
+        my $buffer = '';
+        my $status = $self->smartRead(\$buffer, 1);
+        $self->pushBack($buffer) if length $buffer;
+        $self->setErrInfo($info);
+        
+        return $status == 0 ;
+    }
     elsif (defined *$self->{InputEvent})
      { *$self->{EventEof} }
     else 
@@ -189,6 +216,22 @@ sub clearError
     ${ *$self->{Error} } = '' ;
 }
 
+sub getErrInfo
+{
+    my $self   = shift ;
+
+    return [ *$self->{ErrorNo}, ${ *$self->{Error} } ] ;
+}
+
+sub setErrInfo
+{
+    my $self   = shift ;
+    my $ref    = shift;
+
+    *$self->{ErrorNo}  =  $ref->[0] ;
+    ${ *$self->{Error} } = $ref->[1] ;
+}
+
 sub saveStatus
 {
     my $self   = shift ;
@@ -929,7 +972,7 @@ sub gotoNextStream
     my $magic = $self->ckMagic();
     #*$self->{EndStream} = 0 ;
 
-    if ( ! $magic) {
+    if ( ! defined $magic) {
         if (! *$self->{Transparent} )
         {
             *$self->{EndStream} = 1 ;
@@ -1372,23 +1415,17 @@ __END__
 
 =head1 NAME
 
-
 IO::Uncompress::Base - Base Class for IO::Uncompress modules 
 
-
 =head1 SYNOPSIS
 
     use IO::Uncompress::Base ;
 
 =head1 DESCRIPTION
 
-
 This module is not intended for direct use in application code. Its sole
 purpose if to to be sub-classed by IO::Unompress modules.
 
-
-
-
 =head1 SEE ALSO
 
 L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
@@ -1399,25 +1436,18 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
diff --git a/ext/IO_Compress_Base/pod/FAQ.pod b/ext/IO_Compress_Base/pod/FAQ.pod
new file mode 100644 (file)
index 0000000..16930fa
--- /dev/null
@@ -0,0 +1,346 @@
+
+=head1 NAME
+
+IO::Compress::Base::FAQ -- Frequently Asked Questions about IO::Compress::Base
+
+=head1 DESCRIPTION
+
+Common questions answered.
+
+=head2 Compatibility with Unix compress/uncompress.
+
+This module is not compatible with Unix C<compress>.
+
+If you have the C<uncompress> program available, you can use this to read
+compressed files
+
+    open F, "uncompress -c $filename |";
+    while (<F>)
+    {
+        ...
+
+Alternatively, if you have the C<gunzip> program available, you can use
+this to read compressed files
+
+    open F, "gunzip -c $filename |";
+    while (<F>)
+    {
+        ...
+
+and this to write compress files, if you have the C<compress> program
+available
+
+    open F, "| compress -c $filename ";
+    print F "data";
+    ...
+    close F ;
+
+=head2 Accessing .tar.Z files
+
+See previous FAQ item.
+
+If the C<Archive::Tar> module is installed and either the C<uncompress> or
+C<gunzip> programs are available, you can use one of these workarounds to
+read C<.tar.Z> files.
+
+Firstly with C<uncompress>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "uncompress -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+and this with C<gunzip>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "gunzip -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+Similarly, if the C<compress> program is available, you can use this to
+write a C<.tar.Z> file
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+    use IO::File;
+
+    my $fh = new IO::File "| compress -c >$filename";
+    my $tar = Archive::Tar->new();
+    ...
+    $tar->write($fh);
+    $fh->close ;
+
+=head2 Accessing Zip Files
+
+This module does not support reading/writing zip files.
+
+Support for reading/writing zip files is included with the
+C<IO::Compress::Zip> and C<IO::Uncompress::Unzip> modules.
+
+The primary focus of the C<IO::Compress::Zip> and C<IO::Uncompress::Unzip>
+modules is to provide an C<IO::File> compatible streaming read/write
+interface to zip files/buffers. They are not fully flegged archivers. If
+you are looking for an archiver check out the C<Archive::Zip> module. You
+can find it on CPAN at 
+
+    http://www.cpan.org/modules/by-module/Archive/Archive-Zip-*.tar.gz    
+
+=head2 Compressed files and Net::FTP
+
+The C<Net::FTP> module provides two low-level methods called C<stor> and
+C<retr> that both return filehandles. These filehandles can used with the
+C<IO::Compress/Uncompress> modules to compress or uncompress files read
+from or written to an FTP Server on the fly, without having to create a
+temporary file.
+
+Firstly, here is code that uses C<retr> to uncompressed a file as it is
+read from the FTP Server.
+
+    use Net::FTP;
+    use IO::Uncompress::Bunzip2 qw(:all);
+
+    my $ftp = new Net::FTP ...
+
+    my $retr_fh = $ftp->retr($compressed_filename);
+    bunzip2 $retr_fh => $outFilename, AutoClose => 1
+        or die "Cannot uncompress '$compressed_file': $Bunzip2Error\n";
+
+and this to compress a file as it is written to the FTP Server 
+
+    use Net::FTP;
+    use IO::Compress::Bzip2 qw(:all);
+
+    my $stor_fh = $ftp->stor($filename);
+    bzip2 "filename" => $stor_fh, AutoClose => 1
+        or die "Cannot compress '$filename': $Bzip2Error\n";
+
+=head2 How do I recompress using a different compression?
+
+This is easier that you might expect if you realise that all the
+C<IO::Compress::*> objects are derived from C<IO::File> and that all the
+C<IO::Uncompress::*> modules can read from an C<IO::File> filehandle.
+
+So, for example, say you have a file compressed with gzip that you want to
+recompress with bzip2. Here is all that is needed to carry out the
+recompression.
+
+    use IO::Uncompress::Gunzip ':all';
+    use IO::Compress::Bzip2 ':all';
+
+    my $gzipFile = "somefile.gz";
+    my $bzipFile = "somefile.bz2";
+
+    my $gunzip = new IO::Uncompress::Gunzip $gzipFile
+        or die "Cannot gunzip $gzipFile: $GunzipError\n" ;
+
+    bzip2 $gunzip => $bzipFile 
+        or die "Cannot bzip2 to $bzipFile: $Bzip2Error\n" ;
+
+Note, there is a limitation of this technique. Some compression file
+formats store extra information along with the compressed data payload. For
+example, gzip can optionally store the original filename and Zip stores a
+lot of information about the original file. If the original compressed file
+contains any of this extra information, it will not be transferred to the
+new compressed file usign the technique above.
+
+=head2 Using C<InputLength> to uncompress data embedded in a larger file/buffer.
+
+A fairly common use-case is where compressed data is embedded in a larger
+file/buffer and you want to read both.
+
+As an example consider the structure of a zip file. This is a well-defined
+file format that mixes both compressed and uncompressed sections of data in
+a single file. 
+
+For the purposes of this discussion you can think of a zip file as sequence
+of compressed data streams, each of which is prefixed by an uncompressed
+local header. The local header contains information about the compressed
+data stream, including the name of the compressed file and, in particular,
+the length of the compressed data stream. 
+
+To illustrate how to use C<InputLength> here is a script that walks a zip
+file and prints out how many lines are in each compressed file (if you
+intend write code to walking through a zip file for real see
+L<IO::Uncompress::Unzip/"Walking through a zip file"> )
+
+    use strict;
+    use warnings;
+
+    use IO::File;
+    use IO::Uncompress::RawInflate qw(:all);
+
+    use constant ZIP_LOCAL_HDR_SIG  => 0x04034b50;
+    use constant ZIP_LOCAL_HDR_LENGTH => 30;
+
+    my $file = $ARGV[0] ;
+
+    my $fh = new IO::File "<$file"
+                or die "Cannot open '$file': $!\n";
+
+    while (1)
+    {
+        my $sig;
+        my $buffer;
+
+        my $x ;
+        ($x = $fh->read($buffer, ZIP_LOCAL_HDR_LENGTH)) == ZIP_LOCAL_HDR_LENGTH 
+            or die "Truncated file: $!\n";
+
+        my $signature = unpack ("V", substr($buffer, 0, 4));
+
+        last unless $signature == ZIP_LOCAL_HDR_SIG;
+
+        # Read Local Header
+        my $gpFlag             = unpack ("v", substr($buffer, 6, 2));
+        my $compressedMethod   = unpack ("v", substr($buffer, 8, 2));
+        my $compressedLength   = unpack ("V", substr($buffer, 18, 4));
+        my $uncompressedLength = unpack ("V", substr($buffer, 22, 4));
+        my $filename_length    = unpack ("v", substr($buffer, 26, 2)); 
+        my $extra_length       = unpack ("v", substr($buffer, 28, 2));
+
+        my $filename ;
+        $fh->read($filename, $filename_length) == $filename_length 
+            or die "Truncated file\n";
+
+        $fh->read($buffer, $extra_length) == $extra_length
+            or die "Truncated file\n";
+
+        if ($compressedMethod != 8 && $compressedMethod != 0)
+        {
+            warn "Skipping file '$filename' - not deflated $compressedMethod\n";
+            $fh->read($buffer, $compressedLength) == $compressedLength
+                or die "Truncated file\n";
+            next;
+        }
+
+        if ($compressedMethod == 0 && $gpFlag & 8 == 8)
+        {
+            die "Streamed Stored not supported for '$filename'\n";
+        }
+
+        next if $compressedLength == 0;
+
+        # Done reading the Local Header
+
+        my $inf = new IO::Uncompress::RawInflate $fh,
+                            Transparent => 1,
+                            InputLength => $compressedLength
+          or die "Cannot uncompress $file [$filename]: $RawInflateError\n"  ;
+
+        my $line_count = 0;
+
+        while (<$inf>)
+        {
+            ++ $line_count;
+        }
+
+        print "$filename: $line_count\n";
+    }
+
+The majority of the code above is concerned with reading the zip local
+header data. The code that I want to focus on is at the bottom. 
+
+    while (1) {
+    
+        # read local zip header data
+        # get $filename
+        # get $compressedLength
+
+        my $inf = new IO::Uncompress::RawInflate $fh,
+                            Transparent => 1,
+                            InputLength => $compressedLength
+          or die "Cannot uncompress $file [$filename]: $RawInflateError\n"  ;
+
+        my $line_count = 0;
+
+        while (<$inf>)
+        {
+            ++ $line_count;
+        }
+
+        print "$filename: $line_count\n";
+    }
+
+The call to C<IO::Uncompress::RawInflate> creates a new filehandle C<$inf>
+that can be used to read from the parent filehandle C<$fh>, uncompressing
+it as it goes. The use of the C<InputLength> option will guarantee that
+I<at most> C<$compressedLength> bytes of compressed data will be read from
+the C<$fh> filehandle (The only exception is for an error case like a
+truncated file or a corrupt data stream).
+
+This means that once RawInflate is finished C<$fh> will be left at the
+byte directly after the compressed data stream. 
+
+Now consider what the code looks like without C<InputLength> 
+
+    while (1) {
+    
+        # read local zip header data
+        # get $filename
+        # get $compressedLength
+
+        # read all the compressed data into $data
+        read($fh, $data, $compressedLength);
+
+        my $inf = new IO::Uncompress::RawInflate \$data,
+                            Transparent => 1,
+          or die "Cannot uncompress $file [$filename]: $RawInflateError\n"  ;
+
+        my $line_count = 0;
+
+        while (<$inf>)
+        {
+            ++ $line_count;
+        }
+
+        print "$filename: $line_count\n";
+    }
+
+The difference here is the addition of the temporary variable C<$data>.
+This is used to store a copy of the compressed data while it is being
+uncompressed.
+
+If you know that C<$compressedLength> isn't that big then using temporary
+storage won't be a problem. But if C<$compressedLength> is very large or
+you are writing an application that other people will use, and so have no
+idea how big C<$compressedLength> will be, it could be an issue.
+
+Using C<InputLength> avoids the use of temporary storage and means the
+application can cope with large compressed data streams.
+
+One final point -- obviously C<InputLength> can only be used whenever you
+know the length of the compressed data beforehand, like here with a zip
+file. 
+
+=head1 SEE ALSO
+
+L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
+
+L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
+
+L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
+L<Archive::Tar|Archive::Tar>,
+L<IO::Zlib|IO::Zlib>
+
+=head1 AUTHOR
+
+This module was written by Paul Marquess, F<pmqs@cpan.org>. 
+
+=head1 MODIFICATION HISTORY
+
+See the Changes file.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
index 59088c3..5c104e7 100644 (file)
@@ -19,7 +19,7 @@ BEGIN {
     $extra = 1
         if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };
 
-    plan tests => 78 + $extra ;
+    plan tests => 80 + $extra ;
 
     use_ok('Scalar::Util');
     use_ok('IO::Compress::Base::Common');
@@ -120,6 +120,11 @@ undef) ;
     $$xx_ref = 666 ;
     is $xx, 666;
 
+    my $got1 = ParseParameters(1, {'Fred' => [1, 1, Parse_writable_scalar, undef]}, $got) ;
+    ok $got->parsed('Fred'), "parsed" ;
+    $xx_ref = $got->value('Fred');
+    $$xx_ref = 666 ;
+    is $xx, 666;
 }
 
 My::testParseParameters();
index 4c0773c..206feb5 100644 (file)
@@ -1,6 +1,15 @@
 CHANGES
 -------
 
+  2.009 20 April 2008
+
+      * IO::Compress::Zip 
+
+        - Added exUnix2 option to allow storing of UID & GID.
+        - When running on a Unix derivative the ExtAttr option now defaults
+          to the equivalent of 0666. For all other systems the default
+          remains 0.
+
   2.008 2 November 2007
 
       * Minor documentation changes in README
index af9e6dd..afd6f22 100644 (file)
@@ -3,7 +3,7 @@
 use strict ;
 require 5.004 ;
 
-$::VERSION = '2.008' ;
+$::VERSION = '2.009' ;
 
 use private::MakeUtil;
 use ExtUtils::MakeMaker 5.16 ;
index 4c616e7..e26c701 100644 (file)
@@ -1,44 +1,30 @@
 
                              IO-Compress-Zlib
 
-                             Version 2.008
+                             Version 2.009
 
-                             2nd November 2007
+                              20th April 2008
 
-
-       Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+       Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
           This program is free software; you can redistribute it
            and/or modify it under the same terms as Perl itself.
 
-
-
-
 DESCRIPTION
 -----------
 
-
 This module provides a Perl interface to allow reading and writing of RFC
 1950, 1951, 1952 (i.e. gzip) and zip files/buffers.
 
-
-
-
-
 PREREQUISITES
 -------------
 
 Before you can build IO-Compress-Zlib you need to have the following
 installed on your system:
 
-
     * Perl 5.004 or better. 
     * Compress::Raw::Zlib
     * IO::Compress::Base
 
-
-
-
-
 BUILDING THE MODULE
 -------------------
 
@@ -49,8 +35,6 @@ using this sequence of commands:
     make
     make test
 
-
-
 INSTALLATION
 ------------
 
@@ -58,28 +42,16 @@ To install IO-Compress-Zlib, run the command below:
 
     make install
 
-
-
-
-
 TROUBLESHOOTING
 ---------------
 
-
-
-
-
-
-
-
-
 The t/020isize Test Suite
 ------------------------
 
 This test suite checks that IO-Compress-Zlib can cope with gzip files
 that are larger than 2^32 bytes.
 
-By default these test are NOT run when you do a "make test". If you
+By default these tests are NOT run when you do a "make test". If you
 really want to run them, you need to execute "make longtest".
 
 Be warned though -- this test suite can take hours to run on a slow box.
@@ -88,9 +60,6 @@ Also, due to the way the tests are constructed, some architectures will
 run out of memory during this test. This should not be considered a bug
 in the IO-Compress-Zlib module.
 
-
-
-
 FEEDBACK
 --------
 
@@ -124,9 +93,7 @@ To help me help you, I need all of the following information:
         If you haven't installed IO-Compress-Zlib then search IO::Compress::Gzip.pm
         for a line like this:
 
-          $VERSION = "2.008" ;
-
-
+          $VERSION = "2.009" ;
 
  2. If you are having problems building IO-Compress-Zlib, send me a
     complete log of what happened. Start by unpacking the IO-Compress-Zlib
@@ -137,5 +104,4 @@ To help me help you, I need all of the following information:
         make
         make test TEST_VERBOSE=1          
 
-
 Paul Marquess <pmqs@cpan.org>
index a712127..2ba4b2b 100644 (file)
@@ -4,12 +4,12 @@ use strict;
 use warnings;
 use bytes;
 
-use IO::Compress::Base::Common  2.008 qw(:Status);
+use IO::Compress::Base::Common  2.009 qw(:Status);
 
-use Compress::Raw::Zlib  2.008 qw(Z_OK Z_FINISH MAX_WBITS) ;
+use Compress::Raw::Zlib  2.009 qw(Z_OK Z_FINISH MAX_WBITS) ;
 our ($VERSION);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 sub mkCompObject
 {
index 83ccfeb..998792e 100644 (file)
@@ -4,10 +4,10 @@ use strict;
 use warnings;
 use bytes;
 
-use IO::Compress::Base::Common  2.008 qw(:Status);
+use IO::Compress::Base::Common  2.009 qw(:Status);
 our ($VERSION);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 sub mkCompObject
 {
index 7a8e172..17b89d6 100644 (file)
@@ -6,16 +6,16 @@ use bytes;
 
 require Exporter ;
 
-use IO::Compress::RawDeflate 2.008 ;
+use IO::Compress::RawDeflate 2.009 ;
 
-use Compress::Raw::Zlib  2.008 ;
-use IO::Compress::Zlib::Constants 2.008 ;
-use IO::Compress::Base::Common  2.008 qw(createSelfTiedObject);
+use Compress::Raw::Zlib  2.009 ;
+use IO::Compress::Zlib::Constants 2.009 ;
+use IO::Compress::Base::Common  2.009 qw(createSelfTiedObject);
 
 
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $DeflateError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $DeflateError = '';
 
 @ISA    = qw(Exporter IO::Compress::RawDeflate);
@@ -166,8 +166,6 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Compress::Deflate - Write RFC 1950 files/buffers
  
  
@@ -176,7 +174,6 @@ IO::Compress::Deflate - Write RFC 1950 files/buffers
 
     use IO::Compress::Deflate qw(deflate $DeflateError) ;
 
-
     my $status = deflate $input => $output [,OPTS] 
         or die "deflate failed: $DeflateError\n";
 
@@ -218,24 +215,12 @@ IO::Compress::Deflate - Write RFC 1950 files/buffers
 
 =head1 DESCRIPTION
 
-
 This module provides a Perl interface that allows writing compressed
 data to files or buffer as defined in RFC 1950.
 
-
-
-
-
-
-
-
-
-
-
 For reading RFC 1950 files/buffers, see the companion module 
 L<IO::Uncompress::Inflate|IO::Uncompress::Inflate>.
 
-
 =head1 Functional Interface
 
 A top-level function, C<deflate>, is provided to carry out
@@ -248,14 +233,10 @@ section.
     deflate $input => $output [,OPTS] 
         or die "deflate failed: $DeflateError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 deflate $input => $output [, OPTS]
 
-
 C<deflate> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -294,8 +275,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is compressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -306,13 +285,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -332,14 +308,11 @@ If the C<$output> parameter is a filehandle, the compressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the compressed data will be
@@ -358,21 +331,12 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
-
 When C<$input> maps to multiple files/buffers and C<$output> is a single
 file/buffer the input files/buffers will be stored
 in C<$output> as a concatenated series of compressed data streams.
 
-
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<deflate>,
@@ -392,27 +356,18 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeIn => 0|1 >>
 
 When reading from a file or filehandle, set C<binmode> before reading.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
-
-
 =back
 
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt> and write the compressed
@@ -426,7 +381,6 @@ data to the file C<file1.txt.1950>.
     deflate $input => "$input.1950"
         or die "deflate failed: $DeflateError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 compressed data to a buffer, C<$buffer>.
 
@@ -464,7 +418,6 @@ and if you want to compress each file one at a time, this will do the trick
             or die "Error compressing '$input': $DeflateError\n";
     }
 
-
 =head1 OO Interface
 
 =head2 Constructor
@@ -504,7 +457,6 @@ If the C<$output> parameter is a filehandle, the compressed data will be
 written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be stored
@@ -560,23 +512,15 @@ to it.  Otherwise the file pointer will not be moved.
 
 This parameter defaults to 0.
 
-
-
-
-
 =item C<< Merge => 0|1 >>
 
 This option is used to compress input data and append it to an existing
 compressed data stream in C<$output>. The end result is a single compressed
 data stream stored in C<$output>. 
 
-
-
 It is a fatal error to attempt to use this option when C<$output> is not an
 RFC 1950 data stream.
 
-
-
 There are a number of other limitations with the C<Merge> option:
 
 =over 5 
@@ -593,11 +537,8 @@ If C<$output> is a file or a filehandle, it must be seekable.
 
 =back
 
-
 This parameter defaults to 0.
 
-
-
 =item -Level 
 
 Defines the compression level used by zlib. The value should either be
@@ -630,19 +571,10 @@ constants defined below.
 
 The default is Z_DEFAULT_STRATEGY.
 
-
-
-
-
-
 =item C<< Strict => 0|1 >>
 
-
-
 This is a placeholder option.
 
-
-
 =back
 
 =head2 Examples
@@ -704,14 +636,11 @@ unsuccessful.
 
 Usage is
 
-
     $z->flush;
     $z->flush($flush_type);
 
-
 Flushes any pending compressed data to the output file/buffer.
 
-
 This method takes an optional parameter, C<$flush_type>, that controls
 how the flushing will be carried out. By default the C<$flush_type>
 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
@@ -721,10 +650,8 @@ you fully understand the implications of what it does - overuse of C<flush>
 can seriously degrade the level of compression achieved. See the C<zlib>
 documentation for details.
 
-
 Returns true on success.
 
-
 =head2 tell
 
 Usage is
@@ -741,28 +668,19 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the C<close> method has been called.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the output file/buffer.
 It is a fatal error to attempt to seek backward.
 
 Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -804,33 +722,27 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
 This method always returns C<undef> when compressing. 
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Flushes any pending compressed data and then closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Compress::Deflate object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -849,9 +761,6 @@ If the C<AutoClose> option has been enabled when the IO::Compress::Deflate
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 newStream([OPTS])
 
 Usage is
@@ -865,7 +774,6 @@ the C<$z> object.
 
 See the L</"Constructor Options"> section for more details.
 
-
 =head2 deflateParams
 
 Usage is
@@ -874,20 +782,15 @@ Usage is
 
 TODO
 
-
 =head1 Importing 
 
-
 A number of symbolic constants are required by some methods in 
 C<IO::Compress::Deflate>. None are imported by default.
 
-
-
 =over 5
 
 =item :all
 
-
 Imports C<deflate>, C<$DeflateError> and all symbolic
 constants that can be used by C<IO::Compress::Deflate>. Same as doing this
 
@@ -897,10 +800,8 @@ constants that can be used by C<IO::Compress::Deflate>. Same as doing this
 
 Import all symbolic constants. Same as doing this
 
-
     use IO::Compress::Deflate qw(:flush :level :strategy) ;
 
-
 =item :flush
 
 These symbolic constants are used by the C<flush> method.
@@ -921,7 +822,6 @@ These symbolic constants are used by the C<Level> option in the constructor.
     Z_BEST_COMPRESSION
     Z_DEFAULT_COMPRESSION
 
-
 =item :strategy
 
 These symbolic constants are used by the C<Strategy> option in the constructor.
@@ -937,21 +837,17 @@ These symbolic constants are used by the C<Strategy> option in the constructor.
 
 =back
 
-For 
-
 =head1 EXAMPLES
 
-TODO
-
-
-
-
-
-
+=head2 Apache::GZip Revisited
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Apache::GZip Revisited">
 
+    
 
+=head2 Working with Net::FTP
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -963,7 +859,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -977,24 +872,18 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
index 8bf64fe..2733830 100644 (file)
@@ -8,12 +8,12 @@ use warnings;
 use bytes;
 
 
-use IO::Compress::RawDeflate 2.008 ;
+use IO::Compress::RawDeflate 2.009 ;
 
-use Compress::Raw::Zlib  2.008 ;
-use IO::Compress::Base::Common  2.008 qw(:Status :Parse createSelfTiedObject);
-use IO::Compress::Gzip::Constants 2.008 ;
-use IO::Compress::Zlib::Extra 2.008 ;
+use Compress::Raw::Zlib  2.009 ;
+use IO::Compress::Base::Common  2.009 qw(:Status :Parse createSelfTiedObject);
+use IO::Compress::Gzip::Constants 2.009 ;
+use IO::Compress::Zlib::Extra 2.009 ;
 
 BEGIN
 {
@@ -27,7 +27,7 @@ require Exporter ;
 
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GzipError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $GzipError = '' ;
 
 @ISA    = qw(Exporter IO::Compress::RawDeflate);
@@ -274,8 +274,6 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Compress::Gzip - Write RFC 1952 files/buffers
  
  
@@ -284,7 +282,6 @@ IO::Compress::Gzip - Write RFC 1952 files/buffers
 
     use IO::Compress::Gzip qw(gzip $GzipError) ;
 
-
     my $status = gzip $input => $output [,OPTS] 
         or die "gzip failed: $GzipError\n";
 
@@ -326,27 +323,15 @@ IO::Compress::Gzip - Write RFC 1952 files/buffers
 
 =head1 DESCRIPTION
 
-
 This module provides a Perl interface that allows writing compressed
 data to files or buffer as defined in RFC 1952.
 
-
-
-
-
 All the gzip headers defined in RFC 1952 can be created using
 this module.
 
-
-
-
-
-
-
 For reading RFC 1952 files/buffers, see the companion module 
 L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
 
-
 =head1 Functional Interface
 
 A top-level function, C<gzip>, is provided to carry out
@@ -359,14 +344,10 @@ section.
     gzip $input => $output [,OPTS] 
         or die "gzip failed: $GzipError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 gzip $input => $output [, OPTS]
 
-
 C<gzip> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -405,8 +386,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is compressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -417,12 +396,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
 In addition, if C<$input> is a simple filename, the default values for
 the C<Name> and C<Time> options will be sourced from that file.
 
@@ -430,8 +407,6 @@ If you do not want to use these defaults they can be overridden by
 explicitly setting the C<Name> and C<Time> options or by setting the
 C<Minimal> parameter.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -451,14 +426,11 @@ If the C<$output> parameter is a filehandle, the compressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the compressed data will be
@@ -477,21 +449,12 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
-
 When C<$input> maps to multiple files/buffers and C<$output> is a single
 file/buffer the input files/buffers will be stored
 in C<$output> as a concatenated series of compressed data streams.
 
-
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<gzip>,
@@ -511,27 +474,18 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeIn => 0|1 >>
 
 When reading from a file or filehandle, set C<binmode> before reading.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
-
-
 =back
 
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt> and write the compressed
@@ -545,7 +499,6 @@ data to the file C<file1.txt.gz>.
     gzip $input => "$input.gz"
         or die "gzip failed: $GzipError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 compressed data to a buffer, C<$buffer>.
 
@@ -583,7 +536,6 @@ and if you want to compress each file one at a time, this will do the trick
             or die "Error compressing '$input': $GzipError\n";
     }
 
-
 =head1 OO Interface
 
 =head2 Constructor
@@ -623,7 +575,6 @@ If the C<$output> parameter is a filehandle, the compressed data will be
 written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be stored
@@ -679,23 +630,15 @@ to it.  Otherwise the file pointer will not be moved.
 
 This parameter defaults to 0.
 
-
-
-
-
 =item C<< Merge => 0|1 >>
 
 This option is used to compress input data and append it to an existing
 compressed data stream in C<$output>. The end result is a single compressed
 data stream stored in C<$output>. 
 
-
-
 It is a fatal error to attempt to use this option when C<$output> is not an
 RFC 1952 data stream.
 
-
-
 There are a number of other limitations with the C<Merge> option:
 
 =over 5 
@@ -712,11 +655,8 @@ If C<$output> is a file or a filehandle, it must be seekable.
 
 =back
 
-
 This parameter defaults to 0.
 
-
-
 =item -Level 
 
 Defines the compression level used by zlib. The value should either be
@@ -749,11 +689,6 @@ constants defined below.
 
 The default is Z_DEFAULT_STRATEGY.
 
-
-
-
-
-
 =item C<< Minimal => 0|1 >>
 
 If specified, this option will force the creation of the smallest possible
@@ -881,12 +816,8 @@ If C<< Level => Z_BEST_SPEED >> has been specified then XFL is set to 2.
 If C<< Level => Z_BEST_COMPRESSION >> has been specified then XFL is set to 4.
 Otherwise XFL is set to 0.
 
-
-
 =item C<< Strict => 0|1 >>
 
-
-
 C<Strict> will optionally police the values supplied with other options
 to ensure they are compliant with RFC1952.
 
@@ -956,8 +887,6 @@ The ID header in an C<ExtraField> sub-field can consist of any two bytes.
 
 =back
 
-
-
 =back
 
 =head2 Examples
@@ -1019,14 +948,11 @@ unsuccessful.
 
 Usage is
 
-
     $z->flush;
     $z->flush($flush_type);
 
-
 Flushes any pending compressed data to the output file/buffer.
 
-
 This method takes an optional parameter, C<$flush_type>, that controls
 how the flushing will be carried out. By default the C<$flush_type>
 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
@@ -1036,10 +962,8 @@ you fully understand the implications of what it does - overuse of C<flush>
 can seriously degrade the level of compression achieved. See the C<zlib>
 documentation for details.
 
-
 Returns true on success.
 
-
 =head2 tell
 
 Usage is
@@ -1056,28 +980,19 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the C<close> method has been called.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the output file/buffer.
 It is a fatal error to attempt to seek backward.
 
 Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -1119,33 +1034,27 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
 This method always returns C<undef> when compressing. 
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Flushes any pending compressed data and then closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Compress::Gzip object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -1164,9 +1073,6 @@ If the C<AutoClose> option has been enabled when the IO::Compress::Gzip
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 newStream([OPTS])
 
 Usage is
@@ -1180,7 +1086,6 @@ the C<$z> object.
 
 See the L</"Constructor Options"> section for more details.
 
-
 =head2 deflateParams
 
 Usage is
@@ -1189,20 +1094,15 @@ Usage is
 
 TODO
 
-
 =head1 Importing 
 
-
 A number of symbolic constants are required by some methods in 
 C<IO::Compress::Gzip>. None are imported by default.
 
-
-
 =over 5
 
 =item :all
 
-
 Imports C<gzip>, C<$GzipError> and all symbolic
 constants that can be used by C<IO::Compress::Gzip>. Same as doing this
 
@@ -1212,10 +1112,8 @@ constants that can be used by C<IO::Compress::Gzip>. Same as doing this
 
 Import all symbolic constants. Same as doing this
 
-
     use IO::Compress::Gzip qw(:flush :level :strategy) ;
 
-
 =item :flush
 
 These symbolic constants are used by the C<flush> method.
@@ -1236,7 +1134,6 @@ These symbolic constants are used by the C<Level> option in the constructor.
     Z_BEST_COMPRESSION
     Z_DEFAULT_COMPRESSION
 
-
 =item :strategy
 
 These symbolic constants are used by the C<Strategy> option in the constructor.
@@ -1252,21 +1149,17 @@ These symbolic constants are used by the C<Strategy> option in the constructor.
 
 =back
 
-For 
-
 =head1 EXAMPLES
 
-TODO
-
-
-
-
-
-
+=head2 Apache::GZip Revisited
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Apache::GZip Revisited">
 
+    
 
+=head2 Working with Net::FTP
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -1278,7 +1171,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1292,24 +1184,18 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
index 47ed0e8..92eeddb 100644 (file)
@@ -9,7 +9,7 @@ require Exporter;
 our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names);
 our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 @ISA = qw(Exporter);
 
index b2f5d26..c0c4170 100644 (file)
@@ -7,16 +7,16 @@ use warnings;
 use bytes;
 
 
-use IO::Compress::Base 2.008 ;
-use IO::Compress::Base::Common  2.008 qw(:Status createSelfTiedObject);
-use IO::Compress::Adapter::Deflate  2.008 ;
+use IO::Compress::Base 2.009 ;
+use IO::Compress::Base::Common  2.009 qw(:Status createSelfTiedObject);
+use IO::Compress::Adapter::Deflate  2.009 ;
 
 require Exporter ;
 
 
 our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $RawDeflateError = '';
 
 @ISA = qw(Exporter IO::Compress::Base);
@@ -143,8 +143,8 @@ sub getZlibParams
 {
     my $self = shift ;
 
-    use IO::Compress::Base::Common  2.008 qw(:Parse);
-    use Compress::Raw::Zlib  2.008 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
+    use IO::Compress::Base::Common  2.009 qw(:Parse);
+    use Compress::Raw::Zlib  2.009 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
 
     
     return (
@@ -251,8 +251,6 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Compress::RawDeflate - Write RFC 1951 files/buffers
  
  
@@ -261,7 +259,6 @@ IO::Compress::RawDeflate - Write RFC 1951 files/buffers
 
     use IO::Compress::RawDeflate qw(rawdeflate $RawDeflateError) ;
 
-
     my $status = rawdeflate $input => $output [,OPTS] 
         or die "rawdeflate failed: $RawDeflateError\n";
 
@@ -303,27 +300,15 @@ IO::Compress::RawDeflate - Write RFC 1951 files/buffers
 
 =head1 DESCRIPTION
 
-
 This module provides a Perl interface that allows writing compressed
 data to files or buffer as defined in RFC 1951.
 
-
-
-
-
-
-
 Note that RFC 1951 data is not a good choice of compression format
 to use in isolation, especially if you want to auto-detect it.
 
-
-
-
-
 For reading RFC 1951 files/buffers, see the companion module 
 L<IO::Uncompress::RawInflate|IO::Uncompress::RawInflate>.
 
-
 =head1 Functional Interface
 
 A top-level function, C<rawdeflate>, is provided to carry out
@@ -336,14 +321,10 @@ section.
     rawdeflate $input => $output [,OPTS] 
         or die "rawdeflate failed: $RawDeflateError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 rawdeflate $input => $output [, OPTS]
 
-
 C<rawdeflate> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -382,8 +363,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is compressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -394,13 +373,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -420,14 +396,11 @@ If the C<$output> parameter is a filehandle, the compressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the compressed data will be
@@ -446,21 +419,12 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
-
 When C<$input> maps to multiple files/buffers and C<$output> is a single
 file/buffer the input files/buffers will be stored
 in C<$output> as a concatenated series of compressed data streams.
 
-
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<rawdeflate>,
@@ -480,27 +444,18 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeIn => 0|1 >>
 
 When reading from a file or filehandle, set C<binmode> before reading.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
-
-
 =back
 
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt> and write the compressed
@@ -514,7 +469,6 @@ data to the file C<file1.txt.1951>.
     rawdeflate $input => "$input.1951"
         or die "rawdeflate failed: $RawDeflateError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 compressed data to a buffer, C<$buffer>.
 
@@ -552,7 +506,6 @@ and if you want to compress each file one at a time, this will do the trick
             or die "Error compressing '$input': $RawDeflateError\n";
     }
 
-
 =head1 OO Interface
 
 =head2 Constructor
@@ -592,7 +545,6 @@ If the C<$output> parameter is a filehandle, the compressed data will be
 written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be stored
@@ -648,23 +600,15 @@ to it.  Otherwise the file pointer will not be moved.
 
 This parameter defaults to 0.
 
-
-
-
-
 =item C<< Merge => 0|1 >>
 
 This option is used to compress input data and append it to an existing
 compressed data stream in C<$output>. The end result is a single compressed
 data stream stored in C<$output>. 
 
-
-
 It is a fatal error to attempt to use this option when C<$output> is not an
 RFC 1951 data stream.
 
-
-
 There are a number of other limitations with the C<Merge> option:
 
 =over 5 
@@ -681,11 +625,8 @@ If C<$output> is a file or a filehandle, it must be seekable.
 
 =back
 
-
 This parameter defaults to 0.
 
-
-
 =item -Level 
 
 Defines the compression level used by zlib. The value should either be
@@ -718,19 +659,10 @@ constants defined below.
 
 The default is Z_DEFAULT_STRATEGY.
 
-
-
-
-
-
 =item C<< Strict => 0|1 >>
 
-
-
 This is a placeholder option.
 
-
-
 =back
 
 =head2 Examples
@@ -792,14 +724,11 @@ unsuccessful.
 
 Usage is
 
-
     $z->flush;
     $z->flush($flush_type);
 
-
 Flushes any pending compressed data to the output file/buffer.
 
-
 This method takes an optional parameter, C<$flush_type>, that controls
 how the flushing will be carried out. By default the C<$flush_type>
 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
@@ -809,10 +738,8 @@ you fully understand the implications of what it does - overuse of C<flush>
 can seriously degrade the level of compression achieved. See the C<zlib>
 documentation for details.
 
-
 Returns true on success.
 
-
 =head2 tell
 
 Usage is
@@ -829,28 +756,19 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the C<close> method has been called.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the output file/buffer.
 It is a fatal error to attempt to seek backward.
 
 Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -892,33 +810,27 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
 This method always returns C<undef> when compressing. 
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Flushes any pending compressed data and then closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Compress::RawDeflate object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -937,9 +849,6 @@ If the C<AutoClose> option has been enabled when the IO::Compress::RawDeflate
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 newStream([OPTS])
 
 Usage is
@@ -953,7 +862,6 @@ the C<$z> object.
 
 See the L</"Constructor Options"> section for more details.
 
-
 =head2 deflateParams
 
 Usage is
@@ -962,20 +870,15 @@ Usage is
 
 TODO
 
-
 =head1 Importing 
 
-
 A number of symbolic constants are required by some methods in 
 C<IO::Compress::RawDeflate>. None are imported by default.
 
-
-
 =over 5
 
 =item :all
 
-
 Imports C<rawdeflate>, C<$RawDeflateError> and all symbolic
 constants that can be used by C<IO::Compress::RawDeflate>. Same as doing this
 
@@ -985,10 +888,8 @@ constants that can be used by C<IO::Compress::RawDeflate>. Same as doing this
 
 Import all symbolic constants. Same as doing this
 
-
     use IO::Compress::RawDeflate qw(:flush :level :strategy) ;
 
-
 =item :flush
 
 These symbolic constants are used by the C<flush> method.
@@ -1009,7 +910,6 @@ These symbolic constants are used by the C<Level> option in the constructor.
     Z_BEST_COMPRESSION
     Z_DEFAULT_COMPRESSION
 
-
 =item :strategy
 
 These symbolic constants are used by the C<Strategy> option in the constructor.
@@ -1025,21 +925,17 @@ These symbolic constants are used by the C<Strategy> option in the constructor.
 
 =back
 
-For 
-
 =head1 EXAMPLES
 
-TODO
-
-
-
-
-
-
+=head2 Apache::GZip Revisited
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Apache::GZip Revisited">
 
+    
 
+=head2 Working with Net::FTP
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -1051,7 +947,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1065,24 +960,18 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
index c5c0662..d501dcf 100644 (file)
@@ -4,21 +4,21 @@ use strict ;
 use warnings;
 use bytes;
 
-use IO::Compress::Base::Common  2.008 qw(:Status createSelfTiedObject);
-use IO::Compress::RawDeflate 2.008 ;
-use IO::Compress::Adapter::Deflate 2.008 ;
-use IO::Compress::Adapter::Identity 2.008 ;
-use IO::Compress::Zlib::Extra 2.008 ;
-use IO::Compress::Zip::Constants 2.008 ;
+use IO::Compress::Base::Common  2.009 qw(:Status createSelfTiedObject);
+use IO::Compress::RawDeflate 2.009 ;
+use IO::Compress::Adapter::Deflate 2.009 ;
+use IO::Compress::Adapter::Identity 2.009 ;
+use IO::Compress::Zlib::Extra 2.009 ;
+use IO::Compress::Zip::Constants 2.009 ;
 
 
-use Compress::Raw::Zlib  2.008 qw(crc32) ;
+use Compress::Raw::Zlib  2.009 qw(crc32) ;
 BEGIN
 {
     eval { require IO::Compress::Adapter::Bzip2 ; 
-           import  IO::Compress::Adapter::Bzip2 2.008 ; 
+           import  IO::Compress::Adapter::Bzip2 2.009 ; 
            require IO::Compress::Bzip2 ; 
-           import  IO::Compress::Bzip2 2.008 ; 
+           import  IO::Compress::Bzip2 2.009 ; 
          } ;
 }
 
@@ -27,7 +27,7 @@ require Exporter ;
 
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $ZipError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $ZipError = '';
 
 @ISA = qw(Exporter IO::Compress::RawDeflate);
@@ -141,6 +141,10 @@ sub mkHeader
     my $empty = 0;
     my $osCode = $param->value('OS_Code') ;
     my $extFileAttr = 0 ;
+    
+    # This code assumes Unix.
+    $extFileAttr = 0666 << 16 
+        if $osCode == ZIP_OS_CODE_UNIX ;
 
     if (*$self->{ZipData}{Zip64}) {
         $empty = 0xFFFF;
@@ -172,10 +176,6 @@ sub mkHeader
             $ctlExtra .= mkUnix2Extra();
         }
 
-        # TODO - this code assumes Unix.
-        #$extFileAttr = 0666 << 16 
-        #    if $osCode == ZIP_OS_CODE_UNIX ;
-
         $extFileAttr = $param->value('ExtAttr') 
             if defined $param->value('ExtAttr') ;
 
@@ -392,6 +392,18 @@ sub ckParams
         $got->value("ATime", $timeRef->[0]);
         $got->value("CTime", $timeRef->[2]);
     }
+    
+    # Unix2 Extended Attribute
+    if (! $got->parsed('exUnix2') ) {
+        my $timeRef = $got->value('exUnix2');
+        if ( defined $timeRef) {
+            return $self->saveErrorString(undef, "exUnix2 not a 2-element array ref")   
+                if ref $timeRef ne 'ARRAY' || @$timeRef != 2;
+        }
+
+        $got->value("UID", $timeRef->[0]);
+        $got->value("GID", $timeRef->[1]);
+    }
 
     *$self->{ZipData}{Zip64} = $got->value('Zip64');
     *$self->{ZipData}{Stream} = $got->value('Stream');
@@ -441,8 +453,8 @@ sub getExtraParams
 {
     my $self = shift ;
 
-    use IO::Compress::Base::Common  2.008 qw(:Parse);
-    use Compress::Raw::Zlib  2.008 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
+    use IO::Compress::Base::Common  2.009 qw(:Parse);
+    use Compress::Raw::Zlib  2.009 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
 
     my @Bzip2 = ();
     
@@ -465,6 +477,7 @@ sub getExtraParams
             'Name'      => [0, 1, Parse_any,       ''],
             'Time'      => [0, 1, Parse_any,       undef],
             'exTime'    => [0, 1, Parse_any,       undef],
+            'exUnix2'   => [0, 1, Parse_any,       undef], 
             'ExtAttr'   => [0, 1, Parse_any,       0],
             'OS_Code'   => [0, 1, Parse_unsigned,  $Compress::Raw::Zlib::gzip_os_code],
             
@@ -504,6 +517,7 @@ sub getFileInfo
         $params->value('CTime' => undef) ; # No Creation time
     }
 
+    # NOTE - Unix specific code alert
     $params->value('ExtAttr' => $mode << 16) 
         if ! $params->parsed('ExtAttr');
 
@@ -570,8 +584,6 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Compress::Zip - Write zip files/buffers
  
  
@@ -580,7 +592,6 @@ IO::Compress::Zip - Write zip files/buffers
 
     use IO::Compress::Zip qw(zip $ZipError) ;
 
-
     my $status = zip $input => $output [,OPTS] 
         or die "zip failed: $ZipError\n";
 
@@ -622,18 +633,9 @@ IO::Compress::Zip - Write zip files/buffers
 
 =head1 DESCRIPTION
 
-
 This module provides a Perl interface that allows writing zip 
 compressed data to files or buffer.
 
-
-
-
-
-
-
-
-
 The primary purpose of this module is to provide streaming write access to
 zip files and buffers. It is not a general-purpose file archiver. If that
 is what you want, check out C<Archive::Zip>.
@@ -644,13 +646,9 @@ namely Store (no compression at all), Deflate and Bzip2.
 Note that to create Bzip2 content, the module C<IO::Compress::Bzip2> must
 be installed.
 
-
-
-
 For reading zip files/buffers, see the companion module 
 L<IO::Uncompress::Unzip|IO::Uncompress::Unzip>.
 
-
 =head1 Functional Interface
 
 A top-level function, C<zip>, is provided to carry out
@@ -663,14 +661,10 @@ section.
     zip $input => $output [,OPTS] 
         or die "zip failed: $ZipError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 zip $input => $output [, OPTS]
 
-
 C<zip> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -709,8 +703,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is compressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -721,12 +713,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
 In addition, if C<$input> is a simple filename, the default values for
 the C<Name>, C<Time>, C<ExtAttr> and C<exTime> options will be sourced from that file.
 
@@ -734,8 +724,6 @@ If you do not want to use these defaults they can be overridden by
 explicitly setting the C<Name>, C<Time>, C<ExtAttr> and C<exTime> options or by setting the
 C<Minimal> parameter.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -755,14 +743,11 @@ If the C<$output> parameter is a filehandle, the compressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the compressed data will be
@@ -781,21 +766,12 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
-
 When C<$input> maps to multiple files/buffers and C<$output> is a single
 file/buffer the input files/buffers will each be stored
 in C<$output> as a distinct entry.
 
-
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<zip>,
@@ -815,27 +791,18 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeIn => 0|1 >>
 
 When reading from a file or filehandle, set C<binmode> before reading.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
-
-
 =back
 
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt> and write the compressed
@@ -849,7 +816,6 @@ data to the file C<file1.txt.zip>.
     zip $input => "$input.zip"
         or die "zip failed: $ZipError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 compressed data to a buffer, C<$buffer>.
 
@@ -887,7 +853,6 @@ and if you want to compress each file one at a time, this will do the trick
             or die "Error compressing '$input': $ZipError\n";
     }
 
-
 =head1 OO Interface
 
 =head2 Constructor
@@ -927,7 +892,6 @@ If the C<$output> parameter is a filehandle, the compressed data will be
 written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the compressed data will be stored
@@ -983,8 +947,6 @@ to it.  Otherwise the file pointer will not be moved.
 
 This parameter defaults to 0.
 
-
-
 =item C<< Name => $string >>
 
 Stores the contents of C<$string> in the zip filename header field. If
@@ -1002,7 +964,14 @@ if this option is not specified.
 This option controls the "external file attributes" field in the central
 header of the zip file. This is a 4 byte field.
 
-This option defaults to 0.
+If you are running a Unix derivative this value defaults to 
+
+    0666 << 16
+
+This should allow read/write access to any files that are extracted from
+the zip file/buffer.
+
+For all other systems it defaults to 0.
 
 =item C<< exTime => [$atime, $mtime, $ctime] >>
 
@@ -1010,9 +979,10 @@ This option expects an array reference with exactly three elements:
 C<$atime>, C<mtime> and C<$ctime>. These correspond to the last access
 time, last modification time and creation time respectively.
 
-It uses these values to set the extended timestamp field in the local zip
-header to the three values, $atime, $mtime, $ctime and sets the extended
-timestamp field in the central zip header to C<$mtime>.
+It uses these values to set the extended timestamp field (ID is "UT") in
+the local zip header using the three values, $atime, $mtime, $ctime. In
+addition it sets the extended timestamp field in the central zip header
+using C<$mtime>.
 
 If any of the three values is C<undef> that time value will not be used.
 So, for example, to set only the C<$mtime> you would use this
@@ -1023,6 +993,21 @@ If the C<Minimal> option is set to true, this option will be ignored.
 
 By default no extended time field is created.
 
+=item C<< exUnix2 => [$uid, $gid] >>
+
+This option expects an array reference with exactly two elements: C<$uid>
+and C<$gid>. These values correspond to the numeric user ID and group ID
+of the owner of the files respectively.
+
+When the C<exUnix2> option is present it will trigger the creation of a
+Unix2 extra field (ID is "Ux") in the local zip. This will be populated
+with C<$uid> and C<$gid>. In addition an empty Unix2 extra field will also
+be created in the central zip header
+
+If the C<Minimal> option is set to true, this option will be ignored.
+
+By default no Unix2 extra field is created.
+
 =item C<< Comment => $comment >>
 
 Stores the contents of C<$comment> in the Central File Header of
@@ -1096,8 +1081,9 @@ The default is 0.
 =item C<< ExtraFieldLocal => $data >>
 =item C<< ExtraFieldCentral => $data >>
 
-These options allows additional metadata to be stored in the local and
-central headers in the zip file/buffer.
+The C<ExtraFieldLocal> option is used to store additional metadata in the
+local header for the zip file/buffer. The C<ExtraFieldCentral> does the
+same for the matching central header.
 
 An extra field consists of zero or more subfields. Each subfield consists
 of a two byte header followed by the subfield data.
@@ -1129,10 +1115,9 @@ Alternatively the list of subfields can by supplied as a scalar, thus
 
     ExtraField => $rawdata
 
-The Extended Time field, set using the C<exTime> option, is an example of
-an extended field.
-
-
+The Extended Time field (ID "UT"), set using the C<exTime> option, and the
+Unix2 extra field (ID "Ux), set using the C<exUnix2> option, are examples
+of extra fields.
 
 If the C<Minimal> option is set to true, this option will be ignored.
 
@@ -1140,9 +1125,9 @@ The maximum size of an extra field 65535 bytes.
 
 =item C<< Minimal => 1|0 >>
 
-If specified, this option will disable the creation of all extended fields
-in the zip local and central headers. So the C<exTime>, C<ExtraFieldLocal>
-and C<ExtraFieldCentral> options will be ignored.
+If specified, this option will disable the creation of all extra fields
+in the zip local and central headers. So the C<exTime>, C<exUnix2>,
+C<ExtraFieldLocal> and C<ExtraFieldCentral> options will be ignored.
 
 This parameter defaults to 0.
 
@@ -1169,9 +1154,6 @@ otherwise.
 
 The default is 0.
 
-
-
-
 =item -Level 
 
 Defines the compression level used by zlib. The value should either be
@@ -1204,19 +1186,10 @@ constants defined below.
 
 The default is Z_DEFAULT_STRATEGY.
 
-
-
-
-
-
 =item C<< Strict => 0|1 >>
 
-
-
 This is a placeholder option.
 
-
-
 =back
 
 =head2 Examples
@@ -1278,14 +1251,11 @@ unsuccessful.
 
 Usage is
 
-
     $z->flush;
     $z->flush($flush_type);
 
-
 Flushes any pending compressed data to the output file/buffer.
 
-
 This method takes an optional parameter, C<$flush_type>, that controls
 how the flushing will be carried out. By default the C<$flush_type>
 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
@@ -1295,10 +1265,8 @@ you fully understand the implications of what it does - overuse of C<flush>
 can seriously degrade the level of compression achieved. See the C<zlib>
 documentation for details.
 
-
 Returns true on success.
 
-
 =head2 tell
 
 Usage is
@@ -1315,28 +1283,19 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the C<close> method has been called.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the output file/buffer.
 It is a fatal error to attempt to seek backward.
 
 Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -1378,33 +1337,27 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
 This method always returns C<undef> when compressing. 
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Flushes any pending compressed data and then closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Compress::Zip object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -1423,9 +1376,6 @@ If the C<AutoClose> option has been enabled when the IO::Compress::Zip
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 newStream([OPTS])
 
 Usage is
@@ -1439,7 +1389,6 @@ the C<$z> object.
 
 See the L</"Constructor Options"> section for more details.
 
-
 =head2 deflateParams
 
 Usage is
@@ -1448,20 +1397,15 @@ Usage is
 
 TODO
 
-
 =head1 Importing 
 
-
 A number of symbolic constants are required by some methods in 
 C<IO::Compress::Zip>. None are imported by default.
 
-
-
 =over 5
 
 =item :all
 
-
 Imports C<zip>, C<$ZipError> and all symbolic
 constants that can be used by C<IO::Compress::Zip>. Same as doing this
 
@@ -1471,10 +1415,8 @@ constants that can be used by C<IO::Compress::Zip>. Same as doing this
 
 Import all symbolic constants. Same as doing this
 
-
     use IO::Compress::Zip qw(:flush :level :strategy :zip_method) ;
 
-
 =item :flush
 
 These symbolic constants are used by the C<flush> method.
@@ -1495,7 +1437,6 @@ These symbolic constants are used by the C<Level> option in the constructor.
     Z_BEST_COMPRESSION
     Z_DEFAULT_COMPRESSION
 
-
 =item :strategy
 
 These symbolic constants are used by the C<Strategy> option in the constructor.
@@ -1506,7 +1447,6 @@ These symbolic constants are used by the C<Strategy> option in the constructor.
     Z_FIXED
     Z_DEFAULT_STRATEGY
 
-
 =item :zip_method
 
 These symbolic constants are used by the C<Method> option in the
@@ -1521,21 +1461,17 @@ constructor.
 
 =back
 
-For 
-
 =head1 EXAMPLES
 
-TODO
-
-
-
-
-
-
+=head2 Apache::GZip Revisited
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Apache::GZip Revisited">
 
+    
 
+=head2 Working with Net::FTP
 
+See L<IO::Compress::Zlib::FAQ|IO::Compress::Zlib::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -1547,7 +1483,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1561,24 +1496,18 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-
index 4732c16..d10e8f1 100644 (file)
@@ -7,7 +7,7 @@ require Exporter;
 
 our ($VERSION, @ISA, @EXPORT, %ZIP_CM_MIN_VERSIONS);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 @ISA = qw(Exporter);
 
@@ -17,6 +17,7 @@ $VERSION = '2.008';
     ZIP_CM_DEFLATE
     ZIP_CM_BZIP2
     ZIP_CM_LZMA
+    ZIP_CM_PPMD
     
     ZIP_LOCAL_HDR_SIG
     ZIP_DATA_HDR_SIG
@@ -52,13 +53,15 @@ use constant ZIP_CM_STORE                      => 0 ;
 use constant ZIP_CM_DEFLATE                    => 8 ;
 use constant ZIP_CM_BZIP2                      => 12 ;
 use constant ZIP_CM_LZMA                       => 14 ; # Not Supported yet
+use constant ZIP_CM_PPMD                       => 98 ; # Not Supported yet
 
 # General Purpose Flag
-use constant ZIP_GP_FLAG_ENCRYPTED_MASK        => 1 ;
-use constant ZIP_GP_FLAG_STREAMING_MASK        => 8 ;
-use constant ZIP_GP_FLAG_PATCHED_MASK          => 32 ;
-use constant ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK => 64 ;
-use constant ZIP_GP_FLAG_LZMA_EOS_PRESENT      => 2 ;
+use constant ZIP_GP_FLAG_ENCRYPTED_MASK        => (1 << 0) ;
+use constant ZIP_GP_FLAG_STREAMING_MASK        => (1 << 3) ;
+use constant ZIP_GP_FLAG_PATCHED_MASK          => (1 << 5) ;
+use constant ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK => (1 << 6) ;
+use constant ZIP_GP_FLAG_LZMA_EOS_PRESENT      => (1 << 1) ;
+use constant ZIP_GP_FLAG_LANGUAGE_ENCODING     => (1 << 11) ;
 
 # Internal File Attributes
 use constant ZIP_IFA_TEXT_MASK                 => 1;
index 4781669..c5db5e8 100644 (file)
@@ -9,7 +9,7 @@ require Exporter;
 
 our ($VERSION, @ISA, @EXPORT);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 @ISA = qw(Exporter);
 
index 59919b8..d822971 100644 (file)
@@ -8,9 +8,9 @@ use bytes;
 
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
-use IO::Compress::Gzip::Constants 2.008 ;
+use IO::Compress::Gzip::Constants 2.009 ;
 
 sub ExtraFieldError
 {
index a55f321..f39dd42 100644 (file)
@@ -4,13 +4,13 @@ use warnings;
 use strict;
 use bytes;
 
-use IO::Compress::Base::Common  2.008 qw(:Status);
+use IO::Compress::Base::Common  2.009 qw(:Status);
 
 our ($VERSION);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
-use Compress::Raw::Zlib  2.008 ();
+use Compress::Raw::Zlib  2.009 ();
 
 sub mkUncompObject
 {
index db8161e..ac52a92 100644 (file)
@@ -4,11 +4,11 @@ use strict;
 use warnings;
 use bytes;
 
-use IO::Compress::Base::Common  2.008 qw(:Status);
-use Compress::Raw::Zlib  2.008 qw(Z_OK Z_DATA_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);
+use IO::Compress::Base::Common  2.009 qw(:Status);
+use Compress::Raw::Zlib  2.009 qw(Z_OK Z_DATA_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);
 
 our ($VERSION);
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 
 
index 6882fda..cace88e 100644 (file)
@@ -6,22 +6,22 @@ use strict;
 use warnings;
 use bytes;
 
-use IO::Compress::Base::Common  2.008 qw(createSelfTiedObject);
+use IO::Compress::Base::Common  2.009 qw(createSelfTiedObject);
 
-use IO::Uncompress::Adapter::Inflate  2.008 ();
+use IO::Uncompress::Adapter::Inflate  2.009 ();
 
 
-use IO::Uncompress::Base  2.008 ;
-use IO::Uncompress::Gunzip  2.008 ;
-use IO::Uncompress::Inflate  2.008 ;
-use IO::Uncompress::RawInflate  2.008 ;
-use IO::Uncompress::Unzip  2.008 ;
+use IO::Uncompress::Base  2.009 ;
+use IO::Uncompress::Gunzip  2.009 ;
+use IO::Uncompress::Inflate  2.009 ;
+use IO::Uncompress::RawInflate  2.009 ;
+use IO::Uncompress::Unzip  2.009 ;
 
 require Exporter ;
 
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyInflateError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $AnyInflateError = '';
 
 @ISA = qw( Exporter IO::Uncompress::Base );
@@ -48,7 +48,7 @@ sub anyinflate
 
 sub getExtraParams
 {
-    use IO::Compress::Base::Common  2.008 qw(:Parse);
+    use IO::Compress::Base::Common  2.009 qw(:Parse);
     return ( 'RawInflate' => [1, 1, Parse_boolean,  0] ) ;
 }
 
@@ -127,10 +127,8 @@ __END__
 
 =head1 NAME
 
-
 IO::Uncompress::AnyInflate - Uncompress zlib-based (zip, gzip) file/buffer
 
-
 =head1 SYNOPSIS
 
     use IO::Uncompress::AnyInflate qw(anyinflate $AnyInflateError) ;
@@ -176,10 +174,8 @@ IO::Uncompress::AnyInflate - Uncompress zlib-based (zip, gzip) file/buffer
     eof($z)
     close($z)
 
-
 =head1 DESCRIPTION
 
-
 This module provides a Perl interface that allows the reading of
 files/buffers that have been compressed in a number of formats that use the
 zlib compression library.
@@ -201,10 +197,6 @@ The formats supported are
 The module will auto-detect which, if any, of the supported
 compression formats is being used.
 
-
-
-
-
 =head1 Functional Interface
 
 A top-level function, C<anyinflate>, is provided to carry out
@@ -217,14 +209,10 @@ section.
     anyinflate $input => $output [,OPTS] 
         or die "anyinflate failed: $AnyInflateError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 anyinflate $input => $output [, OPTS]
 
-
 C<anyinflate> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -263,8 +251,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is uncompressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -275,13 +261,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -301,14 +284,11 @@ If the C<$output> parameter is a filehandle, the uncompressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the uncompressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the uncompressed data will be
@@ -327,20 +307,13 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
 When C<$input> maps to multiple compressed files/buffers and C<$output> is
 a single file/buffer, after uncompression C<$output> will contain a
 concatenation of all the uncompressed data from each of the input
 files/buffers.
 
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<anyinflate>,
@@ -360,7 +333,6 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeOut => 0|1 >>
 
 When writing to a file or filehandle, set C<binmode> before writing to the
@@ -368,26 +340,17 @@ file.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
 =item C<< MultiStream => 0|1 >>
 
-
 If the input file/buffer contains multiple compressed data streams, this
 option will uncompress the whole lot as a single data stream.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< TrailingData => $scalar >>
 
 Returns the data, if any, that is present immediately after the compressed
@@ -407,19 +370,12 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option.
 
-
-
 =back
 
-
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt.Compressed> and write the
@@ -434,7 +390,6 @@ compressed data to the file C<file1.txt>.
     anyinflate $input => $output
         or die "anyinflate failed: $AnyInflateError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 uncompressed data to a buffer, C<$buffer>.
 
@@ -478,7 +433,6 @@ and if you want to compress each file one at a time, this will do the trick
 
 The format of the constructor for IO::Uncompress::AnyInflate is shown below
 
-
     my $z = new IO::Uncompress::AnyInflate $input [OPTS]
         or die "IO::Uncompress::AnyInflate failed: $AnyInflateError\n";
 
@@ -510,7 +464,6 @@ If the C<$input> parameter is a filehandle, the compressed data will be
 read from it.
 The string '-' can be used as an alias for standard input.
 
-
 =item A scalar reference 
 
 If C<$input> is a scalar reference, the compressed data will be read from
@@ -520,7 +473,6 @@ C<$$output>.
 
 =head2 Constructor Options
 
-
 The option names defined below are case insensitive and can be optionally
 prefixed by a '-'.  So all of the following are valid
 
@@ -544,8 +496,6 @@ This parameter defaults to 0.
 
 =item C<< MultiStream => 0|1 >>
 
-
-
 Allows multiple concatenated compressed streams to be treated as a single
 compressed stream. Decompression will stop once either the end of the
 file/buffer is reached, an error is encountered (premature eof, corrupt
@@ -554,7 +504,6 @@ start of another stream.
 
 This parameter defaults to 0.
 
-
 =item C<< Prime => $string >>
 
 This option will uncompress the contents of C<$string> before processing the
@@ -596,8 +545,6 @@ This option is mostly used when reading from a filehandle, in which case
 the file pointer will be left pointing to the first byte directly after the
 compressed data stream.
 
-
-
 This option defaults to off.
 
 =item C<< Append => 0|1 >>
@@ -614,20 +561,14 @@ Defaults to 0.
 
 =item C<< Strict => 0|1 >>
 
-
-
 This option controls whether the extra checks defined below are used when
 carrying out the decompression. When Strict is on, the extra tests are
 carried out, when Strict is off they are not.
 
 The default for this option is off.
 
-
 If the input is an RFC 1950 data stream, the following will be checked:
 
-
-
-
 =over 5
 
 =item 1
@@ -641,13 +582,8 @@ uncompressed data actually contained in the file.
 
 =back
 
-
-
 If the input is a gzip (RFC 1952) data stream, the following will be checked:
 
-
-
-
 =over 5
 
 =item 1 
@@ -686,10 +622,6 @@ uncompressed data actually read from the file.
 
 =back
 
-
-
-
-
 =item C<< RawInflate => 0|1 >>
 
 When auto-detecting the compressed format, try to test for raw-deflate (RFC
@@ -701,9 +633,6 @@ prone and can result is false positives.
 
 Defaults to 0.
 
-
-
-
 =item C<< ParseExtra => 0|1 >>
 If the gzip FEXTRA header field is present and this option is set, it will
 force the module to check that it conforms to the sub-field structure as
@@ -713,9 +642,6 @@ If the C<Strict> is on it will automatically enable this option.
 
 Defaults to 0.
 
-
-
-
 =back
 
 =head2 Examples
@@ -759,7 +685,6 @@ or an IO error is encountered.
 Returns the number of uncompressed bytes written to C<$buffer>, zero if eof
 or a negative number on error.
 
-
 =head2 getline
 
 Usage is
@@ -774,7 +699,6 @@ C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to
 determine what constitutes an end of line. Paragraph mode, record mode and
 file slurp mode are all supported. 
 
-
 =head2 getc
 
 Usage is 
@@ -789,8 +713,6 @@ Usage is
 
     $char = $z->ungetc($string)
 
-
-
 =head2 inflateSync
 
 Usage is
@@ -799,7 +721,6 @@ Usage is
 
 TODO
 
-
 =head2 getHeaderInfo
 
 Usage is
@@ -811,9 +732,6 @@ This method returns either a hash reference (in scalar context) or a list
 or hash references (in array context) that contains information about each
 of the header fields in the compressed data stream(s).
 
-
-
-
 =head2 tell
 
 Usage is
@@ -830,26 +748,17 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the end of the compressed input stream has been reached.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the input file/buffer.
 It is a fatal error to attempt to seek backward.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -891,8 +800,6 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
-
 Returns the current uncompressed line number. If C<EXPR> is present it has
 the effect of setting the line number. Note that setting the line number
 does not change the current position within the file/buffer being read.
@@ -900,30 +807,25 @@ does not change the current position within the file/buffer being read.
 The contents of C<$/> are used to to determine what constitutes a line
 terminator.
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Uncompress::AnyInflate object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -942,9 +844,6 @@ If the C<AutoClose> option has been enabled when the IO::Uncompress::AnyInflate
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 nextStream
 
 Usage is
@@ -983,8 +882,6 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option in the constructor.
@@ -1006,8 +903,9 @@ Same as doing this
 
 =head1 EXAMPLES
 
+=head2 Working with Net::FTP
 
-
+See L<IO::Uncompress::AnyInflate::FAQ|IO::Uncompress::AnyInflate::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -1019,7 +917,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1033,22 +930,17 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
index 5ea345d..4e69be1 100644 (file)
@@ -9,12 +9,12 @@ use strict ;
 use warnings;
 use bytes;
 
-use IO::Uncompress::RawInflate 2.008 ;
+use IO::Uncompress::RawInflate 2.009 ;
 
-use Compress::Raw::Zlib 2.008 qw( crc32 ) ;
-use IO::Compress::Base::Common 2.008 qw(:Status createSelfTiedObject);
-use IO::Compress::Gzip::Constants 2.008 ;
-use IO::Compress::Zlib::Extra 2.008 ;
+use Compress::Raw::Zlib 2.009 qw( crc32 ) ;
+use IO::Compress::Base::Common 2.009 qw(:Status createSelfTiedObject);
+use IO::Compress::Gzip::Constants 2.009 ;
+use IO::Compress::Zlib::Extra 2.009 ;
 
 require Exporter ;
 
@@ -28,7 +28,7 @@ Exporter::export_ok_tags('all');
 
 $GunzipError = '';
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 
 sub new
 {
@@ -47,7 +47,7 @@ sub gunzip
 
 sub getExtraParams
 {
-    use IO::Compress::Base::Common  2.008 qw(:Parse);
+    use IO::Compress::Base::Common  2.009 qw(:Parse);
     return ( 'ParseExtra' => [1, 1, Parse_boolean,  0] ) ;
 }
 
@@ -278,12 +278,8 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Uncompress::Gunzip - Read RFC 1952 files/buffers
 
-
-
 =head1 SYNOPSIS
 
     use IO::Uncompress::Gunzip qw(gunzip $GunzipError) ;
@@ -329,20 +325,13 @@ IO::Uncompress::Gunzip - Read RFC 1952 files/buffers
     eof($z)
     close($z)
 
-
 =head1 DESCRIPTION
 
-
-
 This module provides a Perl interface that allows the reading of
 files/buffers that conform to RFC 1952.
 
 For writing RFC 1952 files/buffers, see the companion module IO::Compress::Gzip.
 
-
-
-
-
 =head1 Functional Interface
 
 A top-level function, C<gunzip>, is provided to carry out
@@ -355,14 +344,10 @@ section.
     gunzip $input => $output [,OPTS] 
         or die "gunzip failed: $GunzipError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 gunzip $input => $output [, OPTS]
 
-
 C<gunzip> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -401,8 +386,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is uncompressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -413,13 +396,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -439,14 +419,11 @@ If the C<$output> parameter is a filehandle, the uncompressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the uncompressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the uncompressed data will be
@@ -465,20 +442,13 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
 When C<$input> maps to multiple compressed files/buffers and C<$output> is
 a single file/buffer, after uncompression C<$output> will contain a
 concatenation of all the uncompressed data from each of the input
 files/buffers.
 
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<gunzip>,
@@ -498,7 +468,6 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeOut => 0|1 >>
 
 When writing to a file or filehandle, set C<binmode> before writing to the
@@ -506,26 +475,17 @@ file.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
 =item C<< MultiStream => 0|1 >>
 
-
 If the input file/buffer contains multiple compressed data streams, this
 option will uncompress the whole lot as a single data stream.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< TrailingData => $scalar >>
 
 Returns the data, if any, that is present immediately after the compressed
@@ -545,19 +505,12 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option.
 
-
-
 =back
 
-
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt.gz> and write the
@@ -572,7 +525,6 @@ compressed data to the file C<file1.txt>.
     gunzip $input => $output
         or die "gunzip failed: $GunzipError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 uncompressed data to a buffer, C<$buffer>.
 
@@ -616,7 +568,6 @@ and if you want to compress each file one at a time, this will do the trick
 
 The format of the constructor for IO::Uncompress::Gunzip is shown below
 
-
     my $z = new IO::Uncompress::Gunzip $input [OPTS]
         or die "IO::Uncompress::Gunzip failed: $GunzipError\n";
 
@@ -648,7 +599,6 @@ If the C<$input> parameter is a filehandle, the compressed data will be
 read from it.
 The string '-' can be used as an alias for standard input.
 
-
 =item A scalar reference 
 
 If C<$input> is a scalar reference, the compressed data will be read from
@@ -658,7 +608,6 @@ C<$$output>.
 
 =head2 Constructor Options
 
-
 The option names defined below are case insensitive and can be optionally
 prefixed by a '-'.  So all of the following are valid
 
@@ -682,8 +631,6 @@ This parameter defaults to 0.
 
 =item C<< MultiStream => 0|1 >>
 
-
-
 Allows multiple concatenated compressed streams to be treated as a single
 compressed stream. Decompression will stop once either the end of the
 file/buffer is reached, an error is encountered (premature eof, corrupt
@@ -692,7 +639,6 @@ start of another stream.
 
 This parameter defaults to 0.
 
-
 =item C<< Prime => $string >>
 
 This option will uncompress the contents of C<$string> before processing the
@@ -734,8 +680,6 @@ This option is mostly used when reading from a filehandle, in which case
 the file pointer will be left pointing to the first byte directly after the
 compressed data stream.
 
-
-
 This option defaults to off.
 
 =item C<< Append => 0|1 >>
@@ -752,22 +696,12 @@ Defaults to 0.
 
 =item C<< Strict => 0|1 >>
 
-
-
 This option controls whether the extra checks defined below are used when
 carrying out the decompression. When Strict is on, the extra tests are
 carried out, when Strict is off they are not.
 
 The default for this option is off.
 
-
-
-
-
-
-
-
-
 =over 5
 
 =item 1 
@@ -806,12 +740,6 @@ uncompressed data actually read from the file.
 
 =back
 
-
-
-
-
-
-
 =item C<< ParseExtra => 0|1 >>
 If the gzip FEXTRA header field is present and this option is set, it will
 force the module to check that it conforms to the sub-field structure as
@@ -821,9 +749,6 @@ If the C<Strict> is on it will automatically enable this option.
 
 Defaults to 0.
 
-
-
-
 =back
 
 =head2 Examples
@@ -867,7 +792,6 @@ or an IO error is encountered.
 Returns the number of uncompressed bytes written to C<$buffer>, zero if eof
 or a negative number on error.
 
-
 =head2 getline
 
 Usage is
@@ -882,7 +806,6 @@ C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to
 determine what constitutes an end of line. Paragraph mode, record mode and
 file slurp mode are all supported. 
 
-
 =head2 getc
 
 Usage is 
@@ -897,8 +820,6 @@ Usage is
 
     $char = $z->ungetc($string)
 
-
-
 =head2 inflateSync
 
 Usage is
@@ -907,7 +828,6 @@ Usage is
 
 TODO
 
-
 =head2 getHeaderInfo
 
 Usage is
@@ -919,8 +839,6 @@ This method returns either a hash reference (in scalar context) or a list
 or hash references (in array context) that contains information about each
 of the header fields in the compressed data stream(s).
 
-
-
 =over 5
 
 =item Name
@@ -937,9 +855,6 @@ comment, which will return an empty string.
 
 =back
 
-
-
-
 =head2 tell
 
 Usage is
@@ -956,26 +871,17 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the end of the compressed input stream has been reached.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the input file/buffer.
 It is a fatal error to attempt to seek backward.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -1017,8 +923,6 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
-
 Returns the current uncompressed line number. If C<EXPR> is present it has
 the effect of setting the line number. Note that setting the line number
 does not change the current position within the file/buffer being read.
@@ -1026,30 +930,25 @@ does not change the current position within the file/buffer being read.
 The contents of C<$/> are used to to determine what constitutes a line
 terminator.
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Uncompress::Gunzip object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -1068,9 +967,6 @@ If the C<AutoClose> option has been enabled when the IO::Uncompress::Gunzip
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 nextStream
 
 Usage is
@@ -1109,8 +1005,6 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option in the constructor.
@@ -1132,8 +1026,9 @@ Same as doing this
 
 =head1 EXAMPLES
 
+=head2 Working with Net::FTP
 
-
+See L<IO::Uncompress::Gunzip::FAQ|IO::Uncompress::Gunzip::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -1145,7 +1040,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1159,22 +1053,17 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
index d89786e..d1d636a 100644 (file)
@@ -5,15 +5,15 @@ use strict ;
 use warnings;
 use bytes;
 
-use IO::Compress::Base::Common  2.008 qw(:Status createSelfTiedObject);
-use IO::Compress::Zlib::Constants 2.008 ;
+use IO::Compress::Base::Common  2.009 qw(:Status createSelfTiedObject);
+use IO::Compress::Zlib::Constants 2.009 ;
 
-use IO::Uncompress::RawInflate  2.008 ;
+use IO::Uncompress::RawInflate  2.009 ;
 
 require Exporter ;
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $InflateError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $InflateError = '';
 
 @ISA    = qw( Exporter IO::Uncompress::RawInflate );
@@ -199,12 +199,8 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Uncompress::Inflate - Read RFC 1950 files/buffers
 
-
-
 =head1 SYNOPSIS
 
     use IO::Uncompress::Inflate qw(inflate $InflateError) ;
@@ -250,20 +246,13 @@ IO::Uncompress::Inflate - Read RFC 1950 files/buffers
     eof($z)
     close($z)
 
-
 =head1 DESCRIPTION
 
-
-
 This module provides a Perl interface that allows the reading of
 files/buffers that conform to RFC 1950.
 
 For writing RFC 1950 files/buffers, see the companion module IO::Compress::Deflate.
 
-
-
-
-
 =head1 Functional Interface
 
 A top-level function, C<inflate>, is provided to carry out
@@ -276,14 +265,10 @@ section.
     inflate $input => $output [,OPTS] 
         or die "inflate failed: $InflateError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 inflate $input => $output [, OPTS]
 
-
 C<inflate> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -322,8 +307,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is uncompressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -334,13 +317,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -360,14 +340,11 @@ If the C<$output> parameter is a filehandle, the uncompressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the uncompressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the uncompressed data will be
@@ -386,20 +363,13 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
 When C<$input> maps to multiple compressed files/buffers and C<$output> is
 a single file/buffer, after uncompression C<$output> will contain a
 concatenation of all the uncompressed data from each of the input
 files/buffers.
 
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<inflate>,
@@ -419,7 +389,6 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeOut => 0|1 >>
 
 When writing to a file or filehandle, set C<binmode> before writing to the
@@ -427,26 +396,17 @@ file.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
 =item C<< MultiStream => 0|1 >>
 
-
 If the input file/buffer contains multiple compressed data streams, this
 option will uncompress the whole lot as a single data stream.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< TrailingData => $scalar >>
 
 Returns the data, if any, that is present immediately after the compressed
@@ -466,19 +426,12 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option.
 
-
-
 =back
 
-
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt.1950> and write the
@@ -493,7 +446,6 @@ compressed data to the file C<file1.txt>.
     inflate $input => $output
         or die "inflate failed: $InflateError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 uncompressed data to a buffer, C<$buffer>.
 
@@ -537,7 +489,6 @@ and if you want to compress each file one at a time, this will do the trick
 
 The format of the constructor for IO::Uncompress::Inflate is shown below
 
-
     my $z = new IO::Uncompress::Inflate $input [OPTS]
         or die "IO::Uncompress::Inflate failed: $InflateError\n";
 
@@ -569,7 +520,6 @@ If the C<$input> parameter is a filehandle, the compressed data will be
 read from it.
 The string '-' can be used as an alias for standard input.
 
-
 =item A scalar reference 
 
 If C<$input> is a scalar reference, the compressed data will be read from
@@ -579,7 +529,6 @@ C<$$output>.
 
 =head2 Constructor Options
 
-
 The option names defined below are case insensitive and can be optionally
 prefixed by a '-'.  So all of the following are valid
 
@@ -603,8 +552,6 @@ This parameter defaults to 0.
 
 =item C<< MultiStream => 0|1 >>
 
-
-
 Allows multiple concatenated compressed streams to be treated as a single
 compressed stream. Decompression will stop once either the end of the
 file/buffer is reached, an error is encountered (premature eof, corrupt
@@ -613,7 +560,6 @@ start of another stream.
 
 This parameter defaults to 0.
 
-
 =item C<< Prime => $string >>
 
 This option will uncompress the contents of C<$string> before processing the
@@ -655,8 +601,6 @@ This option is mostly used when reading from a filehandle, in which case
 the file pointer will be left pointing to the first byte directly after the
 compressed data stream.
 
-
-
 This option defaults to off.
 
 =item C<< Append => 0|1 >>
@@ -673,18 +617,12 @@ Defaults to 0.
 
 =item C<< Strict => 0|1 >>
 
-
-
 This option controls whether the extra checks defined below are used when
 carrying out the decompression. When Strict is on, the extra tests are
 carried out, when Strict is off they are not.
 
 The default for this option is off.
 
-
-
-
-
 =over 5
 
 =item 1
@@ -698,17 +636,6 @@ uncompressed data actually contained in the file.
 
 =back
 
-
-
-
-
-
-
-
-
-
-
-
 =back
 
 =head2 Examples
@@ -752,7 +679,6 @@ or an IO error is encountered.
 Returns the number of uncompressed bytes written to C<$buffer>, zero if eof
 or a negative number on error.
 
-
 =head2 getline
 
 Usage is
@@ -767,7 +693,6 @@ C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to
 determine what constitutes an end of line. Paragraph mode, record mode and
 file slurp mode are all supported. 
 
-
 =head2 getc
 
 Usage is 
@@ -782,8 +707,6 @@ Usage is
 
     $char = $z->ungetc($string)
 
-
-
 =head2 inflateSync
 
 Usage is
@@ -792,7 +715,6 @@ Usage is
 
 TODO
 
-
 =head2 getHeaderInfo
 
 Usage is
@@ -804,9 +726,6 @@ This method returns either a hash reference (in scalar context) or a list
 or hash references (in array context) that contains information about each
 of the header fields in the compressed data stream(s).
 
-
-
-
 =head2 tell
 
 Usage is
@@ -823,26 +742,17 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the end of the compressed input stream has been reached.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the input file/buffer.
 It is a fatal error to attempt to seek backward.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -884,8 +794,6 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
-
 Returns the current uncompressed line number. If C<EXPR> is present it has
 the effect of setting the line number. Note that setting the line number
 does not change the current position within the file/buffer being read.
@@ -893,30 +801,25 @@ does not change the current position within the file/buffer being read.
 The contents of C<$/> are used to to determine what constitutes a line
 terminator.
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Uncompress::Inflate object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -935,9 +838,6 @@ If the C<AutoClose> option has been enabled when the IO::Uncompress::Inflate
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 nextStream
 
 Usage is
@@ -976,8 +876,6 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option in the constructor.
@@ -999,8 +897,9 @@ Same as doing this
 
 =head1 EXAMPLES
 
+=head2 Working with Net::FTP
 
-
+See L<IO::Uncompress::Inflate::FAQ|IO::Uncompress::Inflate::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -1012,7 +911,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1026,22 +924,17 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
index 068b260..1b13aa1 100644 (file)
@@ -5,11 +5,11 @@ use strict ;
 use warnings;
 use bytes;
 
-use Compress::Raw::Zlib  2.008 ;
-use IO::Compress::Base::Common  2.008 qw(:Status createSelfTiedObject);
+use Compress::Raw::Zlib  2.009 ;
+use IO::Compress::Base::Common  2.009 qw(:Status createSelfTiedObject);
 
-use IO::Uncompress::Base  2.008 ;
-use IO::Uncompress::Adapter::Inflate  2.008 ;
+use IO::Uncompress::Base  2.009 ;
+use IO::Uncompress::Adapter::Inflate  2.009 ;
 
 
 
@@ -17,7 +17,7 @@ use IO::Uncompress::Adapter::Inflate  2.008 ;
 require Exporter ;
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $RawInflateError);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $RawInflateError = '';
 
 @ISA    = qw( Exporter IO::Uncompress::Base );
@@ -331,12 +331,8 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Uncompress::RawInflate - Read RFC 1951 files/buffers
 
-
-
 =head1 SYNOPSIS
 
     use IO::Uncompress::RawInflate qw(rawinflate $RawInflateError) ;
@@ -382,20 +378,13 @@ IO::Uncompress::RawInflate - Read RFC 1951 files/buffers
     eof($z)
     close($z)
 
-
 =head1 DESCRIPTION
 
-
-
 This module provides a Perl interface that allows the reading of
 files/buffers that conform to RFC 1951.
 
 For writing RFC 1951 files/buffers, see the companion module IO::Compress::RawDeflate.
 
-
-
-
-
 =head1 Functional Interface
 
 A top-level function, C<rawinflate>, is provided to carry out
@@ -408,14 +397,10 @@ section.
     rawinflate $input => $output [,OPTS] 
         or die "rawinflate failed: $RawInflateError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 rawinflate $input => $output [, OPTS]
 
-
 C<rawinflate> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -454,8 +439,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is uncompressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -466,13 +449,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -492,14 +472,11 @@ If the C<$output> parameter is a filehandle, the uncompressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the uncompressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the uncompressed data will be
@@ -518,20 +495,13 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
 When C<$input> maps to multiple compressed files/buffers and C<$output> is
 a single file/buffer, after uncompression C<$output> will contain a
 concatenation of all the uncompressed data from each of the input
 files/buffers.
 
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<rawinflate>,
@@ -551,7 +521,6 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeOut => 0|1 >>
 
 When writing to a file or filehandle, set C<binmode> before writing to the
@@ -559,24 +528,14 @@ file.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
 =item C<< MultiStream => 0|1 >>
 
-
-
 This option is a no-op.
 
-
-
-
-
 =item C<< TrailingData => $scalar >>
 
 Returns the data, if any, that is present immediately after the compressed
@@ -596,19 +555,12 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option.
 
-
-
 =back
 
-
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt.1951> and write the
@@ -623,7 +575,6 @@ compressed data to the file C<file1.txt>.
     rawinflate $input => $output
         or die "rawinflate failed: $RawInflateError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 uncompressed data to a buffer, C<$buffer>.
 
@@ -667,7 +618,6 @@ and if you want to compress each file one at a time, this will do the trick
 
 The format of the constructor for IO::Uncompress::RawInflate is shown below
 
-
     my $z = new IO::Uncompress::RawInflate $input [OPTS]
         or die "IO::Uncompress::RawInflate failed: $RawInflateError\n";
 
@@ -699,7 +649,6 @@ If the C<$input> parameter is a filehandle, the compressed data will be
 read from it.
 The string '-' can be used as an alias for standard input.
 
-
 =item A scalar reference 
 
 If C<$input> is a scalar reference, the compressed data will be read from
@@ -709,7 +658,6 @@ C<$$output>.
 
 =head2 Constructor Options
 
-
 The option names defined below are case insensitive and can be optionally
 prefixed by a '-'.  So all of the following are valid
 
@@ -733,8 +681,6 @@ This parameter defaults to 0.
 
 =item C<< MultiStream => 0|1 >>
 
-
-
 Allows multiple concatenated compressed streams to be treated as a single
 compressed stream. Decompression will stop once either the end of the
 file/buffer is reached, an error is encountered (premature eof, corrupt
@@ -743,7 +689,6 @@ start of another stream.
 
 This parameter defaults to 0.
 
-
 =item C<< Prime => $string >>
 
 This option will uncompress the contents of C<$string> before processing the
@@ -785,8 +730,6 @@ This option is mostly used when reading from a filehandle, in which case
 the file pointer will be left pointing to the first byte directly after the
 compressed data stream.
 
-
-
 This option defaults to off.
 
 =item C<< Append => 0|1 >>
@@ -803,16 +746,8 @@ Defaults to 0.
 
 =item C<< Strict => 0|1 >>
 
-
-
 This option is a no-op.
 
-
-
-
-
-
-
 =back
 
 =head2 Examples
@@ -856,7 +791,6 @@ or an IO error is encountered.
 Returns the number of uncompressed bytes written to C<$buffer>, zero if eof
 or a negative number on error.
 
-
 =head2 getline
 
 Usage is
@@ -871,7 +805,6 @@ C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to
 determine what constitutes an end of line. Paragraph mode, record mode and
 file slurp mode are all supported. 
 
-
 =head2 getc
 
 Usage is 
@@ -886,8 +819,6 @@ Usage is
 
     $char = $z->ungetc($string)
 
-
-
 =head2 inflateSync
 
 Usage is
@@ -896,7 +827,6 @@ Usage is
 
 TODO
 
-
 =head2 getHeaderInfo
 
 Usage is
@@ -908,9 +838,6 @@ This method returns either a hash reference (in scalar context) or a list
 or hash references (in array context) that contains information about each
 of the header fields in the compressed data stream(s).
 
-
-
-
 =head2 tell
 
 Usage is
@@ -927,26 +854,17 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the end of the compressed input stream has been reached.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the input file/buffer.
 It is a fatal error to attempt to seek backward.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -988,8 +906,6 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
-
 Returns the current uncompressed line number. If C<EXPR> is present it has
 the effect of setting the line number. Note that setting the line number
 does not change the current position within the file/buffer being read.
@@ -997,30 +913,25 @@ does not change the current position within the file/buffer being read.
 The contents of C<$/> are used to to determine what constitutes a line
 terminator.
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Uncompress::RawInflate object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -1039,9 +950,6 @@ If the C<AutoClose> option has been enabled when the IO::Uncompress::RawInflate
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 nextStream
 
 Usage is
@@ -1080,8 +988,6 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option in the constructor.
@@ -1103,8 +1009,9 @@ Same as doing this
 
 =head1 EXAMPLES
 
+=head2 Working with Net::FTP
 
-
+See L<IO::Uncompress::RawInflate::FAQ|IO::Uncompress::RawInflate::FAQ/"Compressed files and Net::FTP">
 
 =head1 SEE ALSO
 
@@ -1116,7 +1023,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1130,22 +1036,17 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
index d961c34..bf26560 100644 (file)
@@ -8,13 +8,13 @@ use strict ;
 use warnings;
 use bytes;
 
-use IO::Uncompress::RawInflate  2.008 ;
-use IO::Compress::Base::Common  2.008 qw(:Status createSelfTiedObject);
-use IO::Uncompress::Adapter::Identity 2.008 ;
-use IO::Compress::Zlib::Extra 2.008 ;
-use IO::Compress::Zip::Constants 2.008 ;
+use IO::Uncompress::RawInflate  2.009 ;
+use IO::Compress::Base::Common  2.009 qw(:Status createSelfTiedObject);
+use IO::Uncompress::Adapter::Identity 2.009 ;
+use IO::Compress::Zlib::Extra 2.009 ;
+use IO::Compress::Zip::Constants 2.009 ;
 
-use Compress::Raw::Zlib  2.008 qw(crc32) ;
+use Compress::Raw::Zlib  2.009 qw(crc32) ;
 
 BEGIN
 {
@@ -27,7 +27,7 @@ require Exporter ;
 
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnzipError, %headerLookup);
 
-$VERSION = '2.008';
+$VERSION = '2.009';
 $UnzipError = '';
 
 @ISA    = qw(Exporter IO::Uncompress::RawInflate);
@@ -60,7 +60,7 @@ sub unzip
 
 sub getExtraParams
 {
-    use IO::Compress::Base::Common  2.008 qw(:Parse);
+    use IO::Compress::Base::Common  2.009 qw(:Parse);
 
     
     return (
@@ -705,12 +705,8 @@ __END__
 
 =head1 NAME
 
-
-
 IO::Uncompress::Unzip - Read zip files/buffers
 
-
-
 =head1 SYNOPSIS
 
     use IO::Uncompress::Unzip qw(unzip $UnzipError) ;
@@ -756,20 +752,13 @@ IO::Uncompress::Unzip - Read zip files/buffers
     eof($z)
     close($z)
 
-
 =head1 DESCRIPTION
 
-
-
 This module provides a Perl interface that allows the reading of
 zlib files/buffers.
 
 For writing zip files/buffers, see the companion module IO::Compress::Zip.
 
-
-
-
-
 =head1 Functional Interface
 
 A top-level function, C<unzip>, is provided to carry out
@@ -782,14 +771,10 @@ section.
     unzip $input => $output [,OPTS] 
         or die "unzip failed: $UnzipError\n";
 
-
-
 The functional interface needs Perl5.005 or better.
 
-
 =head2 unzip $input => $output [, OPTS]
 
-
 C<unzip> expects at least two parameters, C<$input> and C<$output>.
 
 =head3 The C<$input> parameter
@@ -828,8 +813,6 @@ The input data will be read from each file in turn.
 The complete array will be walked to ensure that it only
 contains valid filenames before any data is uncompressed.
 
-
-
 =item An Input FileGlob string
 
 If C<$input> is a string that is delimited by the characters "<" and ">"
@@ -840,13 +823,10 @@ If the fileglob does not match any files ...
 
 See L<File::GlobMapper|File::GlobMapper> for more details.
 
-
 =back
 
 If the C<$input> parameter is any other type, C<undef> will be returned.
 
-
-
 =head3 The C<$output> parameter
 
 The parameter C<$output> is used to control the destination of the
@@ -866,14 +846,11 @@ If the C<$output> parameter is a filehandle, the uncompressed data
 will be written to it.
 The string '-' can be used as an alias for standard output.
 
-
 =item A scalar reference 
 
 If C<$output> is a scalar reference, the uncompressed data will be
 stored in C<$$output>.
 
-
-
 =item An Array Reference
 
 If C<$output> is an array reference, the uncompressed data will be
@@ -892,20 +869,13 @@ string. Anything else is an error.
 
 If the C<$output> parameter is any other type, C<undef> will be returned.
 
-
-
 =head2 Notes
 
-
 When C<$input> maps to multiple compressed files/buffers and C<$output> is
 a single file/buffer, after uncompression C<$output> will contain a
 concatenation of all the uncompressed data from each of the input
 files/buffers.
 
-
-
-
-
 =head2 Optional Parameters
 
 Unless specified below, the optional parameters for C<unzip>,
@@ -925,7 +895,6 @@ completed.
 
 This parameter defaults to 0.
 
-
 =item C<< BinModeOut => 0|1 >>
 
 When writing to a file or filehandle, set C<binmode> before writing to the
@@ -933,26 +902,17 @@ file.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< Append => 0|1 >>
 
 TODO
 
 =item C<< MultiStream => 0|1 >>
 
-
 If the input file/buffer contains multiple compressed data streams, this
 option will uncompress the whole lot as a single data stream.
 
 Defaults to 0.
 
-
-
-
-
 =item C<< TrailingData => $scalar >>
 
 Returns the data, if any, that is present immediately after the compressed
@@ -972,19 +932,12 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option.
 
-
-
 =back
 
-
-
-
 =head2 Examples
 
 To read the contents of the file C<file1.txt.zip> and write the
@@ -999,7 +952,6 @@ compressed data to the file C<file1.txt>.
     unzip $input => $output
         or die "unzip failed: $UnzipError\n";
 
-
 To read from an existing Perl filehandle, C<$input>, and write the
 uncompressed data to a buffer, C<$buffer>.
 
@@ -1043,7 +995,6 @@ and if you want to compress each file one at a time, this will do the trick
 
 The format of the constructor for IO::Uncompress::Unzip is shown below
 
-
     my $z = new IO::Uncompress::Unzip $input [OPTS]
         or die "IO::Uncompress::Unzip failed: $UnzipError\n";
 
@@ -1075,7 +1026,6 @@ If the C<$input> parameter is a filehandle, the compressed data will be
 read from it.
 The string '-' can be used as an alias for standard input.
 
-
 =item A scalar reference 
 
 If C<$input> is a scalar reference, the compressed data will be read from
@@ -1085,7 +1035,6 @@ C<$$output>.
 
 =head2 Constructor Options
 
-
 The option names defined below are case insensitive and can be optionally
 prefixed by a '-'.  So all of the following are valid
 
@@ -1109,8 +1058,6 @@ This parameter defaults to 0.
 
 =item C<< MultiStream => 0|1 >>
 
-
-
 Treats the complete zip file/buffer as a single compressed data
 stream. When reading in multi-stream mode each member of the zip
 file/buffer will be uncompressed in turn until the end of the file/buffer
@@ -1118,7 +1065,6 @@ is encountered.
 
 This parameter defaults to 0.
 
-
 =item C<< Prime => $string >>
 
 This option will uncompress the contents of C<$string> before processing the
@@ -1160,8 +1106,6 @@ This option is mostly used when reading from a filehandle, in which case
 the file pointer will be left pointing to the first byte directly after the
 compressed data stream.
 
-
-
 This option defaults to off.
 
 =item C<< Append => 0|1 >>
@@ -1178,28 +1122,12 @@ Defaults to 0.
 
 =item C<< Strict => 0|1 >>
 
-
-
 This option controls whether the extra checks defined below are used when
 carrying out the decompression. When Strict is on, the extra tests are
 carried out, when Strict is off they are not.
 
 The default for this option is off.
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 =back
 
 =head2 Examples
@@ -1243,7 +1171,6 @@ or an IO error is encountered.
 Returns the number of uncompressed bytes written to C<$buffer>, zero if eof
 or a negative number on error.
 
-
 =head2 getline
 
 Usage is
@@ -1258,7 +1185,6 @@ C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to
 determine what constitutes an end of line. Paragraph mode, record mode and
 file slurp mode are all supported. 
 
-
 =head2 getc
 
 Usage is 
@@ -1273,8 +1199,6 @@ Usage is
 
     $char = $z->ungetc($string)
 
-
-
 =head2 inflateSync
 
 Usage is
@@ -1283,7 +1207,6 @@ Usage is
 
 TODO
 
-
 =head2 getHeaderInfo
 
 Usage is
@@ -1295,9 +1218,6 @@ This method returns either a hash reference (in scalar context) or a list
 or hash references (in array context) that contains information about each
 of the header fields in the compressed data stream(s).
 
-
-
-
 =head2 tell
 
 Usage is
@@ -1314,26 +1234,17 @@ Usage is
     $z->eof();
     eof($z);
 
-
-
 Returns true if the end of the compressed input stream has been reached.
 
-
-
 =head2 seek
 
     $z->seek($position, $whence);
     seek($z, $position, $whence);
 
-
-
-
 Provides a sub-set of the C<seek> functionality, with the restriction
 that it is only legal to seek forward in the input file/buffer.
 It is a fatal error to attempt to seek backward.
 
-
-
 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
 SEEK_CUR or SEEK_END.
 
@@ -1375,8 +1286,6 @@ retrieve the autoflush setting.
     $z->input_line_number()
     $z->input_line_number(EXPR)
 
-
-
 Returns the current uncompressed line number. If C<EXPR> is present it has
 the effect of setting the line number. Note that setting the line number
 does not change the current position within the file/buffer being read.
@@ -1384,30 +1293,25 @@ does not change the current position within the file/buffer being read.
 The contents of C<$/> are used to to determine what constitutes a line
 terminator.
 
-
-
 =head2 fileno
 
     $z->fileno()
     fileno($z)
 
-If the C<$z> object is associated with a file or a filehandle, this method
-will return the underlying file descriptor.
+If the C<$z> object is associated with a file or a filehandle, C<fileno>
+will return the underlying file descriptor. Once the C<close> method is
+called C<fileno> will return C<undef>.
 
-If the C<$z> object is is associated with a buffer, this method will
-return undef.
+If the C<$z> object is is associated with a buffer, this method will return
+C<undef>.
 
 =head2 close
 
     $z->close() ;
     close $z ;
 
-
-
 Closes the output file/buffer. 
 
-
-
 For most versions of Perl this method will be automatically invoked if
 the IO::Uncompress::Unzip object is destroyed (either explicitly or by the
 variable with the reference to the object going out of scope). The
@@ -1426,9 +1330,6 @@ If the C<AutoClose> option has been enabled when the IO::Uncompress::Unzip
 object was created, and the object is associated with a file, the
 underlying file will also be closed.
 
-
-
-
 =head2 nextStream
 
 Usage is
@@ -1467,8 +1368,6 @@ of the input file.
 
 Don't bother using C<trailingData> if the input is a filename.
 
-
-
 If you know the length of the compressed data stream before you start
 uncompressing, you can avoid having to use C<trailingData> by setting the
 C<InputLength> option in the constructor.
@@ -1490,8 +1389,44 @@ Same as doing this
 
 =head1 EXAMPLES
 
+=head2 Working with Net::FTP
+
+See L<IO::Uncompress::Unzip::FAQ|IO::Uncompress::Unzip::FAQ/"Compressed files and Net::FTP">
+
+=head2 Walking through a zip file
 
+The code below can be used to traverse a zip file, one compressed data
+stream at a time.
 
+    use IO::Uncompress::Unzip qw($UnzipError);
+
+    my $zipfile = "somefile.zip";
+    my $u = new IO::Uncompress::Unzip $zipfile
+        or die "Cannot open $filefile: $UnzipError";
+
+    for (my $status = 1; ! $u->eof(); $status = $u->nextStream())
+        my $name = $u->getHeaderInfo()->{Name};
+        warn "Processing member $name\n" ;
+
+        my $buff;
+        while (($status = $u->read($buff)) > 0) {
+            # Do something here
+        }
+
+        last unless $status == 0;
+    }
+
+    die "Error processing $zipfile: $!\n"
+        if $status < 0 ;
+
+Each individual compressed data stream is read until the logical
+end-of-file is reached. Then C<nextStream> is called. This will skip to the
+start of the next compressed data stream and clear the end-of-file flag.
+
+It is also worth noting that C<nextStream> can be called at any time -- you
+don't have to wait until you have exhausted a compressed data stream before
+skipping to the next one.
 
 =head1 SEE ALSO
 
@@ -1503,7 +1438,6 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
 L<Archive::Tar|Archive::Tar>,
 L<IO::Zlib|IO::Zlib>
 
-
 For RFC 1950, 1951 and 1952 see 
 F<http://www.faqs.org/rfcs/rfc1950.html>,
 F<http://www.faqs.org/rfcs/rfc1951.html> and
@@ -1517,22 +1451,17 @@ F<http://www.zlib.org>.
 
 The primary site for gzip is F<http://www.gzip.org>.
 
-
-
-
 =head1 AUTHOR
 
 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
 
-
-
 =head1 MODIFICATION HISTORY
 
 See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2007 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
diff --git a/ext/IO_Compress_Zlib/pod/FAQ.pod b/ext/IO_Compress_Zlib/pod/FAQ.pod
new file mode 100644 (file)
index 0000000..31fd24f
--- /dev/null
@@ -0,0 +1,506 @@
+
+=head1 NAME
+
+IO::Compress::Zlib::FAQ -- Frequently Asked Questions about IO::Compress::Zlib
+
+=head1 DESCRIPTION
+
+Common questions answered.
+
+=head2 Compatibility with Unix compress/uncompress.
+
+This module is not compatible with Unix C<compress>.
+
+If you have the C<uncompress> program available, you can use this to read
+compressed files
+
+    open F, "uncompress -c $filename |";
+    while (<F>)
+    {
+        ...
+
+Alternatively, if you have the C<gunzip> program available, you can use
+this to read compressed files
+
+    open F, "gunzip -c $filename |";
+    while (<F>)
+    {
+        ...
+
+and this to write compress files, if you have the C<compress> program
+available
+
+    open F, "| compress -c $filename ";
+    print F "data";
+    ...
+    close F ;
+
+=head2 Accessing .tar.Z files
+
+See previous FAQ item.
+
+If the C<Archive::Tar> module is installed and either the C<uncompress> or
+C<gunzip> programs are available, you can use one of these workarounds to
+read C<.tar.Z> files.
+
+Firstly with C<uncompress>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "uncompress -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+and this with C<gunzip>
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+
+    open F, "gunzip -c $filename |";
+    my $tar = Archive::Tar->new(*F);
+    ...
+
+Similarly, if the C<compress> program is available, you can use this to
+write a C<.tar.Z> file
+
+    use strict;
+    use warnings;
+    use Archive::Tar;
+    use IO::File;
+
+    my $fh = new IO::File "| compress -c >$filename";
+    my $tar = Archive::Tar->new();
+    ...
+    $tar->write($fh);
+    $fh->close ;
+
+=head2 Accessing Zip Files
+
+This module provides support for reading/writing zip files using the
+C<IO::Compress::Zip> and C<IO::Uncompress::Unzip> modules.
+
+The primary focus of the C<IO::Compress::Zip> and C<IO::Uncompress::Unzip>
+modules is to provide an C<IO::File> compatible streaming read/write
+interface to zip files/buffers. They are not fully flegged archivers. If
+you are looking for an archiver check out the C<Archive::Zip> module. You
+can find it on CPAN at 
+
+    http://www.cpan.org/modules/by-module/Archive/Archive-Zip-*.tar.gz    
+
+=head2 Compressed files and Net::FTP
+
+The C<Net::FTP> module provides two low-level methods called C<stor> and
+C<retr> that both return filehandles. These filehandles can used with the
+C<IO::Compress/Uncompress> modules to compress or uncompress files read
+from or written to an FTP Server on the fly, without having to create a
+temporary file.
+
+Firstly, here is code that uses C<retr> to uncompressed a file as it is
+read from the FTP Server.
+
+    use Net::FTP;
+    use IO::Uncompress::Gunzip qw(:all);
+
+    my $ftp = new Net::FTP ...
+
+    my $retr_fh = $ftp->retr($compressed_filename);
+    gunzip $retr_fh => $outFilename, AutoClose => 1
+        or die "Cannot uncompress '$compressed_file': $GunzipError\n";
+
+and this to compress a file as it is written to the FTP Server 
+
+    use Net::FTP;
+    use IO::Compress::Gzip qw(:all);
+
+    my $stor_fh = $ftp->stor($filename);
+    gzip "filename" => $stor_fh, AutoClose => 1
+        or die "Cannot compress '$filename': $GzipError\n";
+
+=head2 How do I recompress using a different compression?
+
+This is easier that you might expect if you realise that all the
+C<IO::Compress::*> objects are derived from C<IO::File> and that all the
+C<IO::Uncompress::*> modules can read from an C<IO::File> filehandle.
+
+So, for example, say you have a file compressed with gzip that you want to
+recompress with bzip2. Here is all that is needed to carry out the
+recompression.
+
+    use IO::Uncompress::Gunzip ':all';
+    use IO::Compress::Bzip2 ':all';
+
+    my $gzipFile = "somefile.gz";
+    my $bzipFile = "somefile.bz2";
+
+    my $gunzip = new IO::Uncompress::Gunzip $gzipFile
+        or die "Cannot gunzip $gzipFile: $GunzipError\n" ;
+
+    bzip2 $gunzip => $bzipFile 
+        or die "Cannot bzip2 to $bzipFile: $Bzip2Error\n" ;
+
+Note, there is a limitation of this technique. Some compression file
+formats store extra information along with the compressed data payload. For
+example, gzip can optionally store the original filename and Zip stores a
+lot of information about the original file. If the original compressed file
+contains any of this extra information, it will not be transferred to the
+new compressed file usign the technique above.
+
+=head2 Apache::GZip Revisited
+
+Below is a mod_perl Apache compression module, called C<Apache::GZip>,
+taken from
+F<http://perl.apache.org/docs/tutorials/tips/mod_perl_tricks/mod_perl_tricks.html#On_the_Fly_Compression>
+
+  package Apache::GZip;
+  #File: Apache::GZip.pm
+  
+  use strict vars;
+  use Apache::Constants ':common';
+  use Compress::Zlib;
+  use IO::File;
+  use constant GZIP_MAGIC => 0x1f8b;
+  use constant OS_MAGIC => 0x03;
+  
+  sub handler {
+      my $r = shift;
+      my ($fh,$gz);
+      my $file = $r->filename;
+      return DECLINED unless $fh=IO::File->new($file);
+      $r->header_out('Content-Encoding'=>'gzip');
+      $r->send_http_header;
+      return OK if $r->header_only;
+  
+      tie *STDOUT,'Apache::GZip',$r;
+      print($_) while <$fh>;
+      untie *STDOUT;
+      return OK;
+  }
+  
+  sub TIEHANDLE {
+      my($class,$r) = @_;
+      # initialize a deflation stream
+      my $d = deflateInit(-WindowBits=>-MAX_WBITS()) || return undef;
+  
+      # gzip header -- don't ask how I found out
+      $r->print(pack("nccVcc",GZIP_MAGIC,Z_DEFLATED,0,time(),0,OS_MAGIC));
+  
+      return bless { r   => $r,
+                     crc =>  crc32(undef),
+                     d   => $d,
+                     l   =>  0 
+                   },$class;
+  }
+  
+  sub PRINT {
+      my $self = shift;
+      foreach (@_) {
+        # deflate the data
+        my $data = $self->{d}->deflate($_);
+        $self->{r}->print($data);
+        # keep track of its length and crc
+        $self->{l} += length($_);
+        $self->{crc} = crc32($_,$self->{crc});
+      }
+  }
+  
+  sub DESTROY {
+     my $self = shift;
+     
+     # flush the output buffers
+     my $data = $self->{d}->flush;
+     $self->{r}->print($data);
+     
+     # print the CRC and the total length (uncompressed)
+     $self->{r}->print(pack("LL",@{$self}{qw/crc l/}));
+  }
+   
+  1;
+
+Here's the Apache configuration entry you'll need to make use of it.  Once
+set it will result in everything in the /compressed directory will be
+compressed automagically.
+
+  <Location /compressed>
+     SetHandler  perl-script
+     PerlHandler Apache::GZip
+  </Location>
+
+Although at first sight there seems to be quite a lot going on in
+C<Apache::GZip>, you could sum up what the code was doing as follows --
+read the contents of the file in C<< $r->filename >>, compress it and write
+the compressed data to standard output. That's all.
+
+This code has to jump through a few hoops to achieve this because
+
+=over
+
+=item 1.
+
+The gzip support in C<Compress::Zlib> version 1.x can only work with a real
+filesystem filehandle. The filehandles used by Apache modules are not
+associated with the filesystem.
+
+=item 2.
+
+That means all the gzip support has to be done by hand - in this case by
+creating a tied filehandle to deal with creating the gzip header and
+trailer.
+
+=back
+
+C<IO::Compress::Gzip> doesn't have that filehandle limitation (this was one
+of the reasons for writing it in the first place). So if
+C<IO::Compress::Gzip> is used instead of C<Compress::Zlib> the whole tied
+filehandle code can be removed. Here is the rewritten code.
+
+  package Apache::GZip;
+  
+  use strict vars;
+  use Apache::Constants ':common';
+  use IO::Compress::Gzip;
+  use IO::File;
+  
+  sub handler {
+      my $r = shift;
+      my ($fh,$gz);
+      my $file = $r->filename;
+      return DECLINED unless $fh=IO::File->new($file);
+      $r->header_out('Content-Encoding'=>'gzip');
+      $r->send_http_header;
+      return OK if $r->header_only;
+
+      my $gz = new IO::Compress::Gzip '-', Minimal => 1
+          or return DECLINED ;
+
+      print $gz $_ while <$fh>;
+  
+      return OK;
+  }
+  
+or even more succinctly, like this, using a one-shot gzip
+
+  package Apache::GZip;
+  
+  use strict vars;
+  use Apache::Constants ':common';
+  use IO::Compress::Gzip qw(gzip);
+  
+  sub handler {
+      my $r = shift;
+      $r->header_out('Content-Encoding'=>'gzip');
+      $r->send_http_header;
+      return OK if $r->header_only;
+
+      gzip $r->filename => '-', Minimal => 1
+        or return DECLINED ;
+
+      return OK;
+  }
+   
+  1;
+
+The use of one-shot C<gzip> above just reads from C<< $r->filename >> and
+writes the compressed data to standard output.
+
+Note the use of the C<Minimal> option in the code above. When using gzip
+for Content-Encoding you should I<always> use this option. In the example
+above it will prevent the filename being included in the gzip header and
+make the size of the gzip data stream a slight bit smaller.
+
+=head2 Using C<InputLength> to uncompress data embedded in a larger file/buffer.
+
+A fairly common use-case is where compressed data is embedded in a larger
+file/buffer and you want to read both.
+
+As an example consider the structure of a zip file. This is a well-defined
+file format that mixes both compressed and uncompressed sections of data in
+a single file. 
+
+For the purposes of this discussion you can think of a zip file as sequence
+of compressed data streams, each of which is prefixed by an uncompressed
+local header. The local header contains information about the compressed
+data stream, including the name of the compressed file and, in particular,
+the length of the compressed data stream. 
+
+To illustrate how to use C<InputLength> here is a script that walks a zip
+file and prints out how many lines are in each compressed file (if you
+intend write code to walking through a zip file for real see
+L<IO::Uncompress::Unzip/"Walking through a zip file"> )
+
+    use strict;
+    use warnings;
+
+    use IO::File;
+    use IO::Uncompress::RawInflate qw(:all);
+
+    use constant ZIP_LOCAL_HDR_SIG  => 0x04034b50;
+    use constant ZIP_LOCAL_HDR_LENGTH => 30;
+
+    my $file = $ARGV[0] ;
+
+    my $fh = new IO::File "<$file"
+                or die "Cannot open '$file': $!\n";
+
+    while (1)
+    {
+        my $sig;
+        my $buffer;
+
+        my $x ;
+        ($x = $fh->read($buffer, ZIP_LOCAL_HDR_LENGTH)) == ZIP_LOCAL_HDR_LENGTH 
+            or die "Truncated file: $!\n";
+
+        my $signature = unpack ("V", substr($buffer, 0, 4));
+
+        last unless $signature == ZIP_LOCAL_HDR_SIG;
+
+        # Read Local Header
+        my $gpFlag             = unpack ("v", substr($buffer, 6, 2));
+        my $compressedMethod   = unpack ("v", substr($buffer, 8, 2));
+        my $compressedLength   = unpack ("V", substr($buffer, 18, 4));
+        my $uncompressedLength = unpack ("V", substr($buffer, 22, 4));
+        my $filename_length    = unpack ("v", substr($buffer, 26, 2)); 
+        my $extra_length       = unpack ("v", substr($buffer, 28, 2));
+
+        my $filename ;
+        $fh->read($filename, $filename_length) == $filename_length 
+            or die "Truncated file\n";
+
+        $fh->read($buffer, $extra_length) == $extra_length
+            or die "Truncated file\n";
+
+        if ($compressedMethod != 8 && $compressedMethod != 0)
+        {
+            warn "Skipping file '$filename' - not deflated $compressedMethod\n";
+            $fh->read($buffer, $compressedLength) == $compressedLength
+                or die "Truncated file\n";
+            next;
+        }
+
+        if ($compressedMethod == 0 && $gpFlag & 8 == 8)
+        {
+            die "Streamed Stored not supported for '$filename'\n";
+        }
+
+        next if $compressedLength == 0;
+
+        # Done reading the Local Header
+
+        my $inf = new IO::Uncompress::RawInflate $fh,
+                            Transparent => 1,
+                            InputLength => $compressedLength
+          or die "Cannot uncompress $file [$filename]: $RawInflateError\n"  ;
+
+        my $line_count = 0;
+
+        while (<$inf>)
+        {
+            ++ $line_count;
+        }
+
+        print "$filename: $line_count\n";
+    }
+
+The majority of the code above is concerned with reading the zip local
+header data. The code that I want to focus on is at the bottom. 
+
+    while (1) {
+    
+        # read local zip header data
+        # get $filename
+        # get $compressedLength
+
+        my $inf = new IO::Uncompress::RawInflate $fh,
+                            Transparent => 1,
+                            InputLength => $compressedLength
+          or die "Cannot uncompress $file [$filename]: $RawInflateError\n"  ;
+
+        my $line_count = 0;
+
+        while (<$inf>)
+        {
+            ++ $line_count;
+        }
+
+        print "$filename: $line_count\n";
+    }
+
+The call to C<IO::Uncompress::RawInflate> creates a new filehandle C<$inf>
+that can be used to read from the parent filehandle C<$fh>, uncompressing
+it as it goes. The use of the C<InputLength> option will guarantee that
+I<at most> C<$compressedLength> bytes of compressed data will be read from
+the C<$fh> filehandle (The only exception is for an error case like a
+truncated file or a corrupt data stream).
+
+This means that once RawInflate is finished C<$fh> will be left at the
+byte directly after the compressed data stream. 
+
+Now consider what the code looks like without C<InputLength> 
+
+    while (1) {
+    
+        # read local zip header data
+        # get $filename
+        # get $compressedLength
+
+        # read all the compressed data into $data
+        read($fh, $data, $compressedLength);
+
+        my $inf = new IO::Uncompress::RawInflate \$data,
+                            Transparent => 1,
+          or die "Cannot uncompress $file [$filename]: $RawInflateError\n"  ;
+
+        my $line_count = 0;
+
+        while (<$inf>)
+        {
+            ++ $line_count;
+        }
+
+        print "$filename: $line_count\n";
+    }
+
+The difference here is the addition of the temporary variable C<$data>.
+This is used to store a copy of the compressed data while it is being
+uncompressed.
+
+If you know that C<$compressedLength> isn't that big then using temporary
+storage won't be a problem. But if C<$compressedLength> is very large or
+you are writing an application that other people will use, and so have no
+idea how big C<$compressedLength> will be, it could be an issue.
+
+Using C<InputLength> avoids the use of temporary storage and means the
+application can cope with large compressed data streams.
+
+One final point -- obviously C<InputLength> can only be used whenever you
+know the length of the compressed data beforehand, like here with a zip
+file. 
+
+=head1 SEE ALSO
+
+L<Compress::Zlib>, L<IO::Compress::Gzip>, 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>
+
+L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
+
+L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
+L<Archive::Tar|Archive::Tar>,
+L<IO::Zlib|IO::Zlib>
+
+=head1 AUTHOR
+
+This module was written by Paul Marquess, F<pmqs@cpan.org>. 
+
+=head1 MODIFICATION HISTORY
+
+See the Changes file.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2005-2008 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
index 1763b03..22b6d56 100644 (file)
@@ -203,6 +203,14 @@ sub cmpFile
     return readFile($filename) eq unpack("u", $uue) ;
 }
 
+sub isRawFormat
+{
+    my $class = shift;
+    my %raw = map { $_ => 1 } qw( RawDeflate );
+
+    return defined $raw{$class};
+}
+
 sub uncompressBuffer
 {
     my $compWith = shift ;
@@ -222,6 +230,8 @@ sub uncompressBuffer
                     'IO::Compress::Lzop::lzop'               => 'IO::Uncompress::UnLzop',
                     'IO::Compress::Lzf'                      => 'IO::Uncompress::UnLzf' ,
                     'IO::Compress::Lzf::lzf'                 => 'IO::Uncompress::UnLzf',
+                    'IO::Compress::PPMd'                     => 'IO::Uncompress::UnPPMd' ,
+                    'IO::Compress::PPMd::ppmd'               => 'IO::Uncompress::UnPPMd',
                     'IO::Compress::DummyComp'                => 'IO::Uncompress::DummyUncomp',
                     'IO::Compress::DummyComp::dummycomp'     => 'IO::Uncompress::DummyUncomp',
                 );
@@ -265,6 +275,10 @@ my %ErrorMap = (    'IO::Compress::Gzip'                => \$IO::Compress::Gzip:
                     'IO::Compress::Lzf::lzf'            => \$IO::Compress::Lzf::LzfError,
                     'IO::Uncompress::UnLzf'             => \$IO::Uncompress::UnLzf::UnLzfError,
                     'IO::Uncompress::UnLzf::unlzf'      => \$IO::Uncompress::UnLzf::UnLzfError,
+                    'IO::Compress::PPMd'                 => \$IO::Compress::PPMd::PPMdError,
+                    'IO::Compress::PPMd::ppmd'            => \$IO::Compress::PPMd::PPMdError,
+                    'IO::Uncompress::UnPPMd'             => \$IO::Uncompress::UnPPMd::UnPPMdError,
+                    'IO::Uncompress::UnPPMd::unppmd'      => \$IO::Uncompress::UnPPMd::UnPPMdError,
 
                     'IO::Compress::DummyComp'           => \$IO::Compress::DummyComp::DummyCompError,
                     'IO::Compress::DummyComp::dummycomp'=> \$IO::Compress::DummyComp::DummyCompError,
@@ -293,6 +307,8 @@ my %TopFuncMap = (  'IO::Compress::Gzip'          => 'IO::Compress::Gzip::gzip',
                     'IO::Uncompress::UnLzop'      => 'IO::Uncompress::UnLzop::unlzop',
                     'IO::Compress::Lzf'           => 'IO::Compress::Lzf::lzf',
                     'IO::Uncompress::UnLzf'       => 'IO::Uncompress::UnLzf::unlzf',
+                    'IO::Compress::PPMd'           => 'IO::Compress::PPMd::ppmd',
+                    'IO::Uncompress::UnPPMd'       => 'IO::Uncompress::UnPPMd::unppmd',
                     'IO::Compress::DummyComp'     => 'IO::Compress::DummyComp::dummyuncomp',
                     'IO::Uncompress::DummyUncomp' => 'IO::Uncompress::DummyUncomp::dummyuncomp',
                  );
@@ -319,6 +335,8 @@ my %inverse  = ( 'IO::Compress::Gzip'                    => 'IO::Uncompress::Gun
                  'IO::Compress::Lzop'                    => 'IO::Uncompress::UnLzop',
                  'IO::Compress::Lzf::lzf'                => 'IO::Uncompress::UnLzf::unlzf',
                  'IO::Compress::Lzf'                     => 'IO::Uncompress::UnLzf',
+                 'IO::Compress::PPMd::ppmd'              => 'IO::Uncompress::UnPPMd::unppmd',
+                 'IO::Compress::PPMd'                    => 'IO::Uncompress::UnPPMd',
                  'IO::Compress::DummyComp::dummycomp'    => 'IO::Uncompress::DummyUncomp::dummyuncomp',
                  'IO::Compress::DummyComp'               => 'IO::Uncompress::DummyUncomp',
              );
@@ -372,6 +390,8 @@ sub compressBuffer
                     'IO::Uncompress::UnLzop::unlzop'          => 'IO::Compress::Lzop',
                     'IO::Uncompress::UnLzp'                   => 'IO::Compress::Lzf',
                     'IO::Uncompress::UnLzf::unlzf'            => 'IO::Compress::Lzf',
+                    'IO::Uncompress::UnPPMd'                  => 'IO::Compress::PPMd',
+                    'IO::Uncompress::UnPPMd::unppmd'          => 'IO::Compress::PPMd',
                     'IO::Uncompress::AnyInflate'              => 'IO::Compress::Gzip',
                     'IO::Uncompress::AnyInflate::anyinflate'  => 'IO::Compress::Gzip',
                     'IO::Uncompress::AnyUncompress'           => 'IO::Compress::Gzip',
index 51b45fc..e2f7a2a 100644 (file)
@@ -47,6 +47,7 @@ sub run
     my $Error           = getErrorRef($CompressClass);
     my $UnError         = getErrorRef($UncompressClass);
 
+    if(1)
     {
 
         title "Testing $CompressClass Errors";
@@ -81,7 +82,7 @@ sub run
         like $@, mkEvalErr("^${CompressClass}::write: offset outside string");
 
         eval ' $gz->syswrite("abc", 1, -4)' ;
-        like $@, mkEvalErr("^${CompressClass}::write: offset outside string");
+        like $@, mkEvalErr("^${CompressClass}::write: offset outside string"), "write outside string";
     }
 
 
@@ -161,7 +162,6 @@ sub run
 
 
             my $lex = new LexFile my $name ;
-            #my $name = "/tmp/try.lzf";
 
             my $hello = <<EOM ;
 hello world
@@ -322,7 +322,6 @@ EOM
 
               ok $x->close, "  close" ;
             }
-            #exit;
 
             is $uncomp, $hello, "  expected output" ;
         }
@@ -419,11 +418,11 @@ EOM
               ok ! defined $x->fileno() ;
               1 while $x->read($uncomp) > 0  ;
 
-              ok $x->close ;
+              ok $x->close, "closed" ;
             }
 
-            is $uncomp, $hello ;
-            ok $buffer eq $keep ;
+            is $uncomp, $hello, "got expected uncompressed data" ;
+            ok $buffer eq $keep, "compressed input not changed" ;
         }
 
         if ($CompressClass ne 'RawDeflate')
@@ -434,8 +433,9 @@ EOM
             my $buffer = '';
             {
               my $x ;
-              ok $x = new $CompressClass(\$buffer) ;
-              ok $x->close ;
+              $x = new $CompressClass(\$buffer);
+              ok $x, "new $CompressClass" ;
+              ok $x->close, "close ok" ;
           
             }
 
@@ -541,7 +541,6 @@ EOM
             read($fh1, $rest, 5000);
             is $x->trailingData() . $rest, $trailer ;
             #print "# [".$x->trailingData() . "][$rest]\n" ;
-            #exit;
 
         }
 
@@ -1416,7 +1415,6 @@ EOT
             }
         }
 
-
         {
             title "write tests - invalid data" ;