summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorOlivier Blin <oblin@mandriva.com>2007-08-24 08:32:15 +0000
committerOlivier Blin <oblin@mandriva.com>2007-08-24 08:32:15 +0000
commit45c01d10f0e762edf28d3d8e0732732b4593a6bf (patch)
tree330880677fc9a355adb8922cf8fa618443e3b334 /kernel
parent2a6f84cfd7f47a76b5eac95254ad9598c6152103 (diff)
downloaddrakx-45c01d10f0e762edf28d3d8e0732732b4593a6bf.tar
drakx-45c01d10f0e762edf28d3d8e0732732b4593a6bf.tar.gz
drakx-45c01d10f0e762edf28d3d8e0732732b4593a6bf.tar.bz2
drakx-45c01d10f0e762edf28d3d8e0732732b4593a6bf.tar.xz
drakx-45c01d10f0e762edf28d3d8e0732732b4593a6bf.zip
fix resolving category from module (mainly fix usbhid loading)
Diffstat (limited to 'kernel')
-rw-r--r--kernel/list_modules.pm2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/list_modules.pm b/kernel/list_modules.pm
index 39d58a144..b6dd09e2b 100644
--- a/kernel/list_modules.pm
+++ b/kernel/list_modules.pm
@@ -335,7 +335,7 @@ sub module2category {
foreach my $t1 (keys %l) {
my $h = $l{$t1};
foreach my $t2 (keys %$h) {
- $module eq $_ and return "$t1/$t2" foreach @{$h->{$t2}};
+ $module eq filename2modname($_) and return "$t1/$t2" foreach @{$h->{$t2}};
}
}
return;
pan class="hl opt">= qw(ide ieee1394 input pci pcmcia pnp serio usb); my @alias_groups; my $alias_re = qr/^\s*alias\s+(([^:]+):\S+)\s+(\S+)$/; sub alias_to_ids { my ($alias) = @_; my ($vendor, $device); # returns (vendor, device) if (($vendor, $device) = $alias =~ /:v([0-9A-F]{4})[dp]([0-9A-F]{4})/) { return ($vendor, $device); } elsif (($vendor, $device) = $alias =~ /:v0{4}([0-9A-F]{4})[dp]0{4}([0-9A-F]{4})/) { return ($vendor, $device); } } sub parse_path { my ($group, $path) = @_; if (-d $path) { parse_path($group, "$path/$_") foreach all($path); } elsif (-f $path) { foreach (cat_($path)) { if (my ($alias, $class, $module) = $_ =~ $alias_re) { if (member($class, @classes)) { my ($vendor, $device) = alias_to_ids($alias); if ($vendor) { $group->{$class} ||= {}; $group->{$class}{$vendor} ||= {}; $group->{$class}{$vendor}{$device} ||= []; push @{$group->{$class}{$vendor}{$device}}, $alias, $module; } else { push @{$group->{$class}{other}}, $alias, $module; } } } } } } sub parse_file_modules { my ($path) = @_; my %modules; foreach (cat_($path)) { if (my ($alias, undef, $module) = $_ =~ $alias_re) { push @{$modules{$module}}, $alias; } } \%modules; } sub get_alias_groups { my ($o_skip_config) = @_; #- FIXME: only o_skip_config from the first call is considered @alias_groups = map { my $group = {}; parse_path($group, $_) foreach @$_; $group; } if_(!$o_skip_config, @config_groups), @system_groups unless @alias_groups; @alias_groups; } sub get_modules { my ($modalias, $o_skip_config) = @_; my ($class) = $modalias =~ /^([^:]+):\S+$/; my ($vendor, $device) = alias_to_ids($modalias); $class && member($class, @classes) or return; require File::FnMatch; foreach my $group (get_alias_groups($o_skip_config)) { my @aliases; foreach my $subgroup ($group->{$class}{$vendor}{$device}, $group->{$class}{other}) { foreach (group_by2(@$subgroup)) { File::FnMatch::fnmatch($_->[0], $modalias) and push @aliases, $_->[1]; } } return uniq(@aliases) if @aliases; } } 1;