diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2004-09-14 22:24:22 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2004-09-14 22:24:22 +0000 |
commit | 93550e296a162e347d8ea927ffaca5e4b9a70a12 (patch) | |
tree | 8e5b58435cfa09c0d6c80766252d542e32a9de83 | |
parent | c066ba4952b818fceea057e7756843302d5252da (diff) |
Handle basic mtree for directory creation.
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/Mtree.pm | 48 |
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; |