summaryrefslogtreecommitdiff
path: root/regress/usr.sbin/pkg_add/minitar
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2005-07-20 15:33:51 +0000
committerMarc Espie <espie@cvs.openbsd.org>2005-07-20 15:33:51 +0000
commitdb9db15cec9e4232db305eebb209c41f667f4dcf (patch)
treeb2b8190762163712eb798b7b6f42c9273d165f19 /regress/usr.sbin/pkg_add/minitar
parent2ff933cfa3798a40fe1793f3b81024050bf68577 (diff)
minitar script to test OpenBSD::Ustar, should be able to read/write archives
fully compatible with the tar Ustar format.
Diffstat (limited to 'regress/usr.sbin/pkg_add/minitar')
-rw-r--r--regress/usr.sbin/pkg_add/minitar83
1 files changed, 83 insertions, 0 deletions
diff --git a/regress/usr.sbin/pkg_add/minitar b/regress/usr.sbin/pkg_add/minitar
new file mode 100644
index 00000000000..959caf5f72e
--- /dev/null
+++ b/regress/usr.sbin/pkg_add/minitar
@@ -0,0 +1,83 @@
+#! /usr/bin/perl
+#
+# ex:ts=8 sw=4:
+# $OpenBSD: minitar,v 1.1 2005/07/20 15:33:50 espie Exp $
+#
+# Copyright (c) 2005 Marc Espie <espie@openbsd.org>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+use OpenBSD::Ustar;
+use strict;
+
+my $mode = shift;
+my $arcname;
+my ($what, $verbose);
+
+sub create
+{
+ my $arcname = shift;
+ open my $out, '>', $arcname or die "bad archive $arcname: $!\n";
+ my $arc = OpenBSD::Ustar->new($out, '.');
+ for my $f (@_) {
+ my $e = $arc->prepare($f);
+ $e->write();
+ }
+ $arc->close();
+}
+
+sub extract
+{
+ my $arcname = shift;
+ open my $in, '<', $arcname or die "bad archive $arcname: $!\n";
+ my $arc = OpenBSD::Ustar->new($in);
+ while (my $e = $arc->next()) {
+ $e->create();
+ }
+ $arc->close();
+}
+
+sub test
+{
+ my $arcname = shift;
+ open my $in, '<', $arcname or die "bad archive $arcname: $!\n";
+ my $arc = OpenBSD::Ustar->new($in);
+ while (my $e = $arc->next()) {
+ print $e->{name}, "\n";
+ }
+ $arc->close();
+}
+
+if ($mode =~ s/c//) {
+ $what = \&create;
+} elsif ($mode =~ s/t//) {
+ $what = \&test;
+} elsif ($mode =~ s/x//) {
+ $what = \&extract;
+}
+if ($mode =~ s/f//) {
+ $arcname = shift;
+}
+if ($mode =~ s/v//) {
+ $verbose = 1;
+}
+
+if ($mode ne '') {
+ die "Bad mode\n";
+}
+
+if (!defined $what) {
+ die "Bad mode\n";
+}
+
+&$what($arcname, @ARGV);