Archive::Unzip::Burst - Featureless but fast ZIP extraction


Archive-Unzip-Burst documentation Contained in the Archive-Unzip-Burst distribution.

Index


Code Index:

NAME

Top

Archive::Unzip::Burst - Featureless but fast ZIP extraction

SYNOPSIS

Top

  use Archive::Unzip::Burst 'unzip';
  unzip("zipfile.zip", "targetdirectory");

DESCRIPTION

Top

This module is a thin XS wrapper around a copy of the well-known InfoZip library but it does not expose its full functionality. Instead, it only lets you extract a ZIP archive to some directory, about as fast as if you were using your system unzip command itself.

The module comes with its own copy of InfoZip's UnZip 5.52 included.

If you are looking for a full-featured interface to ZIP archives, you should look at Archive::Zip or the various IO::Compress::* or IO::Uncompress::* modules instead. Furthermore, this module is to be considered experimental. It has only been tested on x86 and x86-64 linux and is known to fail on, for example win32. Any help in this regard would be much appreciated.

If available, the module uses the prefork pragma to load its dependencies either on-demand run-time or at compile-time (if in a forking environment). It does not, however, require the prefork module to be installed for normal operation.

EXPORT

None by default. But you may choose to export the unzip function.

FUNCTIONS

Top

unzip

Takes a file name and a target directory as arguments. Extracts the zip file to the target directory. Returns the integer status code from the underlying ZIP library. Presumably, zero means success as with system calls. The return value may change in future versions.

SEE ALSO

Top

The InfoZip homepage at http://www.info-zip.org.

Archive::Zip

IO::Uncompress::Unzip

prefork

AUTHOR

Top

Steffen Mueller, <smueller@cpan.org>

COPYRIGHT AND LICENSE

Top


Archive-Unzip-Burst documentation Contained in the Archive-Unzip-Burst distribution.

package Archive::Unzip::Burst;

# The license of this Perl code is the same as that of perl itself.
# The documentation which should be embedded at the end of this file
# should contain more details.
#
# The license of the InfoZip library which is used by this module is
# reproduced in full in the following paragraphs:
#
# This is version 2005-Feb-10 of the Info-ZIP copyright and license.
# The definitive version of this document should be available at
# ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
# 
# 
# Copyright (c) 1990-2005 Info-ZIP.  All rights reserved.
# 
# For the purposes of this copyright and license, "Info-ZIP" is defined as
# the following set of individuals:
# 
#    Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
#    Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
#    Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
#    David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
#    Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
#    Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,
#    Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,
#    Rich Wales, Mike White
# 
# This software is provided "as is," without warranty of any kind, express
# or implied.  In no event shall Info-ZIP or its contributors be held liable
# for any direct, indirect, incidental, special or consequential damages
# arising out of the use of or inability to use this software.
# 
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it
# freely, subject to the following restrictions:
# 
#     1. Redistributions of source code must retain the above copyright notice,
#        definition, disclaimer, and this list of conditions.
# 
#     2. Redistributions in binary form (compiled executables) must reproduce
#        the above copyright notice, definition, disclaimer, and this list of
#        conditions in documentation and/or other materials provided with the
#        distribution.  The sole exception to this condition is redistribution
#        of a standard UnZipSFX binary (including SFXWiz) as part of a
#        self-extracting archive; that is permitted without inclusion of this
#        license, as long as the normal SFX banner has not been removed from
#        the binary or disabled.
# 
#     3. Altered versions--including, but not limited to, ports to new operating
#        systems, existing ports with new graphical interfaces, and dynamic,
#        shared, or static library versions--must be plainly marked as such
#        and must not be misrepresented as being the original source.  Such
#        altered versions also must not be misrepresented as being Info-ZIP
#        releases--including, but not limited to, labeling of the altered
#        versions with the names "Info-ZIP" (or any variation thereof, including,
#        but not limited to, different capitalizations), "Pocket UnZip," "WiZ"
#        or "MacZip" without the explicit permission of Info-ZIP.  Such altered
#        versions are further prohibited from misrepresentative use of the
#        Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s).
# 
#     4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip,"
#        "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its
#        own source and binary releases.


use 5.006;
use strict;
use warnings;

BEGIN {
  if (eval "require prefork;") {
    eval "prefork->import(qw/Cwd File::Spec/)";
  }
}

require Exporter;

our @ISA = qw(Exporter);

our %EXPORT_TAGS = ( 'all' => [ qw(
	unzip
) ] );

our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );

our @EXPORT = qw();

our $VERSION = '0.02';

require XSLoader;
XSLoader::load('Archive::Unzip::Burst', $VERSION);

sub unzip {
  my $filename = shift;
  my $dir = shift;
  require Cwd;
  require File::Spec;
  if (not -f $filename) {
    die "ZIP file not found: $filename";
  }
  my $file_is_abs = File::Spec->file_name_is_absolute($filename);
  if (not $file_is_abs) {
    $filename = File::Spec->rel2abs($filename);
  }
  my $olddir = Cwd::cwd();
  mkdir($dir);
  chdir($dir) or die $!;
  my $ret = _unzip($filename);
  chdir($olddir) or die $!;
  return $ret;
}

1;
__END__