Add ARM files
[dh-make-perl] / dev / arm / libarchive-zip-perl / libarchive-zip-perl-1.18 / examples / zipGrep.pl
diff --git a/dev/arm/libarchive-zip-perl/libarchive-zip-perl-1.18/examples/zipGrep.pl b/dev/arm/libarchive-zip-perl/libarchive-zip-perl-1.18/examples/zipGrep.pl
new file mode 100644 (file)
index 0000000..47f4ba8
--- /dev/null
@@ -0,0 +1,57 @@
+#!/usr/bin/perl -w
+# This program searches for the given Perl regular expression in a Zip archive.
+# Archive is assumed to contain text files.
+# By Ned Konz, perl@bike-nomad.com
+# Usage:
+#      perl zipGrep.pl 'pattern' myZip.zip
+#
+use strict;
+use Archive::Zip qw(:CONSTANTS :ERROR_CODES);
+
+if ( @ARGV != 2 )
+{
+       print <<EOF;
+This program searches for the given Perl regular expression in a Zip archive.
+Archive is assumed to contain text files.
+Usage:
+       perl $0 'pattern' myZip.zip
+EOF
+       exit 1;
+}
+
+my $pattern = shift;
+$pattern = qr{$pattern};    # compile the regular expression
+my $zipName = shift;
+
+my $zip = Archive::Zip->new();
+if ( $zip->read($zipName) != AZ_OK )
+{
+       die "Read error reading $zipName\n";
+}
+
+foreach my $member ( $zip->members() )
+{
+       my ( $bufferRef, $status, $lastChunk );
+       my $memberName = $member->fileName();
+       my $lineNumber = 1;
+       $lastChunk = '';
+       $member->desiredCompressionMethod(COMPRESSION_STORED);
+       $status = $member->rewindData();
+       die "rewind error $status" if $status != AZ_OK;
+
+       while ( !$member->readIsDone() )
+       {
+               ( $bufferRef, $status ) = $member->readChunk();
+               die "readChunk error $status"
+                 if $status != AZ_OK && $status != AZ_STREAM_END;
+
+               my $buffer = $lastChunk . $$bufferRef;
+               while ( $buffer =~ m{(.*$pattern.*\n)}mg )
+               {
+                       print "$memberName:$1";
+               }
+               ($lastChunk) = $$bufferRef =~ m{([^\n\r]+)\z};
+       }
+
+       $member->endRead();
+}