diff options
Diffstat (limited to 'perl-install/install_interactive.pm')
-rw-r--r-- | perl-install/install_interactive.pm | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/perl-install/install_interactive.pm b/perl-install/install_interactive.pm index 3f99a5833..7d6f5be91 100644 --- a/perl-install/install_interactive.pm +++ b/perl-install/install_interactive.pm @@ -72,7 +72,7 @@ Then choose action ``Mount point'' and set it to `/'"), 1) or return; } sub partitionWizardSolutions { - my ($o, $all_hds, $readonly) = @_; + my ($o, $all_hds) = @_; my $hds = $all_hds->{hds}; my $fstab = [ fsedit::get_all_fstab($all_hds) ]; my @wizlog; @@ -86,14 +86,15 @@ sub partitionWizardSolutions { # each solution is a [ score, text, function ], where the function retunrs true if succeeded - my @good_hds = grep { $_->can_raw_add } @$hds; - if (fsedit::free_space(@good_hds) > $min_linux and !$readonly) { + my @hds_rw = grep { !$_->{readonly} } @$hds; + my @hds_can_add = grep { $_->can_raw_add } @hds_rw; + if (fsedit::free_space(@hds_can_add) > $min_linux) { $solutions{free_space} = [ 20, _("Use free space"), sub { fsedit::auto_allocate($all_hds); 1 } ] } else { push @wizlog, _("Not enough free space to allocate new partitions") . ": " . - (@good_hds ? - fsedit::free_space(@good_hds) . " < $min_linux" : - "no harddrive on which partitions can be added") if !$readonly; + (@hds_can_add ? + fsedit::free_space(@hds_can_add) . " < $min_linux" : + "no harddrive on which partitions can be added"); } if (my @truefs = grep { isTrueFS($_) } @$fstab) { @@ -122,11 +123,12 @@ sub partitionWizardSolutions { fsedit::recompute_loopbacks($all_hds); 1; } ]; + my @ok_for_resize_fat = grep { !fsedit::part2hd($_, $all_hds)->{readonly} } @ok_forloopback; $solutions{resize_fat} = [ 6 - @fats, _("Use the free space on the Windows partition"), sub { $o->set_help('resizeFATChoose'); - my $part = $o->ask_from_listf('', _("Which partition do you want to resize?"), \&partition_table::description, \@ok_forloopback) or return; + my $part = $o->ask_from_listf('', _("Which partition do you want to resize?"), \&partition_table::description, \@ok_for_resize_fat) or return; $o->set_help('resizeFATWait'); my $w = $o->wait_message(_("Resizing"), _("Resizing Windows partition")); require resize_fat::main; @@ -166,19 +168,19 @@ When sure, press Ok.")) or return; fsedit::auto_allocate($all_hds); 1; - } ] if !$readonly; + } ] if @ok_for_resize_fat; } else { push @wizlog, _("There is no FAT partition to resize or to use as loopback (or not enough space left)") . @fats ? "\nFAT partitions:" . join('', map { "\n $_->{device} $_->{free} (" . ($min_linux + $min_swap + $min_freewin) . ")" } @fats) : ''; } - if (@$fstab && !$readonly) { + if (@$fstab && @hds_rw) { $solutions{wipe_drive} = [ 10, fsedit::is_one_big_fat($hds) ? _("Remove Windows(TM)") : _("Erase entire disk"), sub { $o->set_help('takeOverHdChoose'); my $hd = $o->ask_from_listf('', _("You have more than one hard drive, which one do you install linux on?"), - \&partition_table::description, $hds) or return; + \&partition_table::description, \@hds_rw) or return; $o->set_help('takeOverHdConfirm'); $o->ask_okcancel('', _("ALL existing partitions and their data will be lost on drive %s", partition_table::description($hd))) or return; partition_table::raw::zero_MBR($hd); @@ -187,7 +189,7 @@ When sure, press Ok.")) or return; } ]; } - if (!$readonly) { + if (@hds_rw) { $solutions{diskdrake} = [ 0, _("Custom disk partitioning"), sub { partition_with_diskdrake($o, $all_hds, 'nowizard') } ]; } @@ -219,7 +221,7 @@ sub partitionWizard { $o->set_help('doPartitionDisks'); - my %solutions = partitionWizardSolutions($o, $o->{all_hds}, $o->{partitioning}{readonly}); + my %solutions = partitionWizardSolutions($o, $o->{all_hds}); if ($o->{lnx4win}) { if ($solutions{loopback}) { %solutions = (loopback => $solutions{loopback}); |