diff options
Diffstat (limited to 'perl-install/standalone/service_harddrake')
-rwxr-xr-x | perl-install/standalone/service_harddrake | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/perl-install/standalone/service_harddrake b/perl-install/standalone/service_harddrake index 8af36b163..309b58eb0 100755 --- a/perl-install/standalone/service_harddrake +++ b/perl-install/standalone/service_harddrake @@ -54,26 +54,38 @@ foreach (@harddrake::data::tree) { $msg .= "- " . harddrake::data::custom_id($ID{$_}, $item) . " was added\n" foreach @added; modules::load('ohci1394') if $Ident eq 'FIREWIRE_CONTROLLER' && any { $_->{driver} eq 'ohci1394' } @added; @added || @was_removed or next; - harddrake::data::set_removable_configurator($Ident, first(values %$oldconfig, values %ID), \$configurator); - next unless -x first(split /\s+/, $configurator); - my ($pid, $no); - $SIG{ALRM} = sub { $no = 1; kill 15, $pid }; - unless ($pid = fork()) { - exec("/usr/share/harddrake/confirm 'Hardware changes in $Ident class ($timeout seconds to answer)' '" . $msg . "Do you want to run the appropriate config tool ?'"); + my @configurator_pool; + if (harddrake::data::is_removable($Ident)) { + foreach my $device (@ID{@added}) { + push @configurator_pool, harddrake::data::set_removable_configurator($Ident, $device); + }; + foreach my $device (@{%$oldconfig}{@was_removed}) { + push @configurator_pool, harddrake::data::set_removable_remover($Ident, $device); + } + } else { + @configurator_pool = $configurator; } - alarm($timeout); - wait(); - my $res = $?; - alarm(0); - if ($no) { - require interactive; - undef $wait; - $in ||= interactive->vnew; - $wait = $in->wait_message(N("Please wait"), N("Hardware probing in progress")); - } elsif ($res) { - if (fork()) { - wait(); - } else { exec("$configurator 2>/dev/null") or die "$configurator missing\n" } + next unless -x first(split /\s+/, $configurator_pool[0]); + foreach my $configurator (@configurator_pool) { + my ($pid, $no); + $SIG{ALRM} = sub { $no = 1; kill 15, $pid }; + unless ($pid = fork()) { + exec("/usr/share/harddrake/confirm 'Hardware changes in $Ident class ($timeout seconds to answer)' '" . $msg . "Do you want to run the appropriate config tool ?'"); + } + alarm($timeout); + wait(); + my $res = $?; + alarm(0); + if ($no) { + require interactive; + undef $wait; + $in ||= interactive->vnew; + $wait = $in->wait_message(N("Please wait"), N("Hardware probing in progress")); + } elsif ($res) { + if (fork()) { + wait(); + } else { exec("$configurator 2>/dev/null") or die "$configurator missing\n" } + } } } |