summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2004-09-14 22:24:22 +0000
committerMarc Espie <espie@cvs.openbsd.org>2004-09-14 22:24:22 +0000
commit93550e296a162e347d8ea927ffaca5e4b9a70a12 (patch)
tree8e5b58435cfa09c0d6c80766252d542e32a9de83
parentc066ba4952b818fceea057e7756843302d5252da (diff)
Handle basic mtree for directory creation.
-rw-r--r--usr.sbin/pkg_add/OpenBSD/Mtree.pm48
1 files changed, 48 insertions, 0 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Mtree.pm b/usr.sbin/pkg_add/OpenBSD/Mtree.pm
new file mode 100644
index 00000000000..3899bf78889
--- /dev/null
+++ b/usr.sbin/pkg_add/OpenBSD/Mtree.pm
@@ -0,0 +1,48 @@
+# ex:ts=8 sw=4:
+# $OpenBSD: Mtree.pm,v 1.1 2004/09/14 22:24:21 espie Exp $
+#
+# Copyright (c) 2004 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 strict;
+use warnings;
+
+package OpenBSD::Mtree;
+use File::Spec;
+
+# read an mtree file, and produce the corresponding directory hierarchy
+sub parse
+{
+ my ($mtree, $current_dir, $filename) = @_;
+ open my $file, '<', $filename;
+ while(<$file>) {
+ chomp;
+ s/^\s*//;
+ next if /^\#/ || /^\//;
+ s/\s.*$//;
+ next if /^$/;
+ if ($_ eq '..') {
+ $current_dir =~ s|/[^/]*$||;
+ next;
+ } else {
+ $current_dir.="/$_";
+ }
+ $_ = $current_dir;
+ while (s|/\./|/|) {}
+ $mtree->{File::Spec->canonpath($_)} = 1;
+ }
+ close $file;
+}
+
+1;