diff options
Diffstat (limited to 'perl-install/fs/wild_device.pm')
| -rw-r--r-- | perl-install/fs/wild_device.pm | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/perl-install/fs/wild_device.pm b/perl-install/fs/wild_device.pm index 0e10f19ab..ff5a32253 100644 --- a/perl-install/fs/wild_device.pm +++ b/perl-install/fs/wild_device.pm @@ -1,8 +1,8 @@ -package fs::wild_device; # $Id$ +package fs::wild_device; use diagnostics; use strict; - +use devices; use common; @@ -11,19 +11,19 @@ sub analyze { if ($dev =~ m!^/u?dev/(.*)!) { 'dev', $dev; - } elsif ($dev !~ m!^/! && (-e "/dev/$dev" || -e "$::prefix/dev/$dev")) { + } elsif ($dev !~ m!^/! && (-e "/dev/$dev" || -e "/dev/$dev")) { 'dev', "/dev/$dev"; } elsif ($dev =~ /^LABEL=(.*)/) { 'label', $1; } elsif ($dev =~ /^UUID=(.*)/) { 'uuid', $1; - } elsif ($dev eq 'none' || $dev eq 'rootfs') { + } elsif (member($dev, qw(none rootfs))) { 'virtual'; - } elsif ($dev =~ m!^(\S+):/\w!) { + } elsif ($dev =~ m!^(\S+):/(\w|$)!) { 'nfs'; } elsif ($dev =~ m!^//\w!) { 'smb'; - } elsif ($dev =~ m!^http://!) { + } elsif ($dev =~ m!^https?://!) { 'dav'; } } @@ -40,16 +40,16 @@ sub to_subpart { $part->{device_UUID} = $val; } elsif ($kind eq 'dev') { my %part = (faked_device => 0); - if (my $rdev = (stat "$::prefix$dev")[6]) { + if (my $rdev = (stat "$dev")[6]) { ($part{major}, $part{minor}) = unmakedev($rdev); } - my $symlink = readlink("$::prefix$dev"); + my $symlink = $dev !~ m!mapper/! ? readlink("$dev") : undef; $dev =~ s!/u?dev/!!; if ($symlink && $symlink !~ m!^/!) { my $keep = 1; - if ($symlink =~ m!/!) { + if ($symlink =~ m!/! || $dev =~ m!/!) { $symlink = MDK::Common::File::concat_symlink("/dev/" . dirname($dev), $symlink); $symlink =~ s!^/dev/!! or $keep = 0; } @@ -67,7 +67,7 @@ sub to_subpart { return \%part; } } else { - if ($dev =~ m!^/! && -f "$::prefix$dev") { + if ($dev =~ m!^/! && -f "$dev") { #- it must be a loopback file or directory to bind } else { log::l("part_from_wild_device_name: unknown device $dev"); @@ -76,6 +76,12 @@ sub to_subpart { $part; } +sub _prefer_device_UUID { + my ($part) = @_; + $part->{prefer_device_UUID} || + !$::no_uuid_by_default && devices::should_prefer_UUID($part->{device}); +} + sub from_part { my ($prefix, $part) = @_; @@ -83,7 +89,7 @@ sub from_part { 'LABEL=' . $part->{device_LABEL}; } elsif ($part->{device_alias}) { "/dev/$part->{device_alias}"; - } elsif (!$part->{prefer_device} && ($part->{prefer_device_UUID} || !$::no_uuid_by_default) && $part->{device_UUID}) { + } elsif (!$part->{prefer_device} && $part->{device_UUID} && _prefer_device_UUID($part)) { 'UUID=' . $part->{device_UUID}; } else { my $faked_device = exists $part->{faked_device} ? |
