summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/service_harddrake
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/standalone/service_harddrake')
-rwxr-xr-xperl-install/standalone/service_harddrake50
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" }
+ }
}
}