From 9ee84a2c340af2d4b1912d7573c2223368a22903 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Wed, 22 Mar 2000 23:18:25 +0000 Subject: no_comment --- perl-install/loopback.pm | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'perl-install/loopback.pm') diff --git a/perl-install/loopback.pm b/perl-install/loopback.pm index 88623fbe2..8fd9c8748 100644 --- a/perl-install/loopback.pm +++ b/perl-install/loopback.pm @@ -6,7 +6,7 @@ use strict; #-###################################################################################### #- misc imports #-###################################################################################### -use common qw(:common :system :file); +use common qw(:common :system :file :functional); use partition_table qw(:types); use commands; use fs; @@ -79,17 +79,19 @@ sub inspect { if ($part->{isMounted}) { $dir = ($prefix || '') . $part->{mntpoint}; + } elsif ($part->{notFormatted} && !$part->{isFormatted}) { + $dir = ''; } else { mkdir $dir, 0700; fs::mount($part->{device}, $dir, type2fs($part->{type}), 'rdonly'); } - my $h = bless \$dir, "loopback::inspect"; - common::add_f4before_leaving(sub { - unless ($part->{isMounted}) { + my $h = before_leaving { + if (!$part->{isMounted} && $dir) { fs::umount($dir); unlink($dir) } - }, $h, 'DESTROY'); + }; + $h->{dir} = $dir; $h; } @@ -97,18 +99,31 @@ sub getFree { my ($dir, $part) = @_; my ($freespace); - if ($part->{isFormatted} || !$part->{notFormatted}) { - $freespace = $part->{size}; - } else { + if ($dir) { my $buf = ' ' x 20000; syscall_('statfs', $dir, $buf) or return; my (undef, $blocksize, $size, undef, $free, undef) = unpack "L2L4", $buf; $_ *= $blocksize / 512 foreach $free; $freespace = $free; + } else { + $freespace = $part->{size}; } + $freespace - sum map { $_->{size} } @{$part->{loopback} || []}; } +#- returns the size of the loopback file if it already exists +#- returns -1 is the loopback file can't be used +sub verifFile { + my ($dir, $file, $part) = @_; + -e "$dir$file" and return -s "$dir$file"; + + $_->{loopback_file} eq $file and return -1 foreach @{$part->{loopback} || []}; + + undef; +} + + 1; -- cgit v1.2.1