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 5d6ea5e86..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} || $::isInstall && $::o->{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} ?   | 
