From 47c08e9dbae7dba4fc23da097a82dee2b3503348 Mon Sep 17 00:00:00 2001 From: Maarten Vanraes Date: Sat, 6 Aug 2016 13:51:00 +0200 Subject: Mount: make a findpath helper function --- lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm | 114 ++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm index 5b3593b4..f93c4e6d 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm @@ -134,6 +134,120 @@ sub _makemount { #============================================================= +=head2 findfields + +=head3 INPUT + + $code: CodeRef + @params: Array + +=head3 OUTPUT + + Array|undef + +=head3 DESCRIPTION + + this function finds the correct mount fields for a device and returns it. + +=cut + +#============================================================= +sub findfields { + my $self = shift; + my $code = shift; + my @params = @_; + + # check the part dev with current mounts + open F, ') { + my $fields = undef; + @{$fields} = split(/ /, $line); + my $ret = $code->($self, $fields, @params); + if ($ret != 0) { + close F; + return $fields; + } + } + close F; + return undef; +} + +#============================================================= + +=head2 findpath + +=head3 INPUT + + $dev: Str + $partstate: PartState + +=head3 OUTPUT + + Str|undef + +=head3 DESCRIPTION + + this function finds a suitable path for a device and returns it. + +=cut + +#============================================================= +sub findpath { + my $self = shift; + my $dev = shift; + my $partstate = shift; + my $code = shift; + my @params = @_; + # TODO: need some more filters + $self->D("$self: called findpath for mount: $dev, $partstate"); + + ## LOAD + if ($partstate == ManaTools::Shared::disk_backend::Part->LoadedState) { + # TODO: i donno yet + return undef; + } + + ## PROBE + if ($partstate == ManaTools::Shared::disk_backend::Part->CurrentState) { + $self->D("$self: called findpath for probing paths for $dev"); + + my $fields = $self->findfields(sub { + my $self = shift; + my $fields = shift; + my $dev = shift; + my $code = shift; + my @params = @_; + # identify first + # check device as fallback + if (defined $code) { + my $ret = $code->($dev, $fields, @params); + $self->D("$self: after code execution for $fields->[2] ($fields->[9]), return value is $ret, looking for $dev"); + if ($ret != 0) { + close F; + return 1; + } + } + elsif ($fields->[2] eq $dev) { + close F; + return 1; + } + return 0; + }, $dev, $code, @params); + return $fields->[4] if defined($fields); + return undef; + } + + ## SAVE + if ($partstate == ManaTools::Shared::disk_backend::Part->FutureState) { + # TODO: i donno yet + return undef; + } + + return undef; +} + +#============================================================= + =head2 changedpart =head3 INPUT -- cgit v1.2.1