summaryrefslogtreecommitdiffstats
path: root/perl-install/modalias.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/modalias.pm')
-rw-r--r--perl-install/modalias.pm32
1 files changed, 26 insertions, 6 deletions
diff --git a/perl-install/modalias.pm b/perl-install/modalias.pm
index 3ff863e30..e1b61edc0 100644
--- a/perl-install/modalias.pm
+++ b/perl-install/modalias.pm
@@ -13,6 +13,11 @@ my @config_groups = (
"/etc/modprobe.conf",
"/etc/modprobe.d",
],
+);
+my @system_groups = (
+ [
+ "/lib/module-init-tools/ldetect-lst-modules.alias",
+ ],
[
"/lib/modules/" . c::kernel_version() . "/modules.alias",
],
@@ -20,6 +25,8 @@ my @config_groups = (
my @classes = 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);
@@ -37,9 +44,9 @@ sub parse_path {
parse_path($group, "$path/$_") foreach all($path);
} elsif (-f $path) {
foreach (cat_($path)) {
- if (my ($alias, $class, $module) = /^\s*alias\s+(([^:]+):\S+)\s+(\S+)$/) {
- my ($vendor, $device) = alias_to_ids($alias);
+ 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} ||= {};
@@ -54,23 +61,36 @@ sub parse_path {
}
}
-sub get_alias_groups() {
+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;
- } @config_groups unless @alias_groups;
+ } if_(!$o_skip_config, @config_groups), @system_groups unless @alias_groups;
@alias_groups;
}
sub get_modules {
- my ($modalias) = @_;
+ 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()) {
+ 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)) {