diff options
author | Thierry Vignaud <tv@mageia.org> | 2013-01-14 20:29:39 +0000 |
---|---|---|
committer | Thierry Vignaud <tv@mageia.org> | 2013-01-14 20:29:39 +0000 |
commit | 76082a819319e45ae980987e3be5c1cbf6964b60 (patch) | |
tree | a6f05d6d946e0b3c84937c1444f063b6210975ba /perl-install/detect_devices.pm | |
parent | fe68b2291cc8f8c096bc082cfcacfad1a7e42e87 (diff) | |
download | drakx-76082a819319e45ae980987e3be5c1cbf6964b60.tar drakx-76082a819319e45ae980987e3be5c1cbf6964b60.tar.gz drakx-76082a819319e45ae980987e3be5c1cbf6964b60.tar.bz2 drakx-76082a819319e45ae980987e3be5c1cbf6964b60.tar.xz drakx-76082a819319e45ae980987e3be5c1cbf6964b60.zip |
use a proper interface between C (ldetect) & perl world, using XS
create directly the hash in XS instead of instead of sprintf()ing it
into a string which was then parsed in perl in order to actually create
the hash
this also simplifies adding further fields
Diffstat (limited to 'perl-install/detect_devices.pm')
-rw-r--r-- | perl-install/detect_devices.pm | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm index 7cfdf31c6..6d4090d5f 100644 --- a/perl-install/detect_devices.pm +++ b/perl-install/detect_devices.pm @@ -847,12 +847,11 @@ my (@pci, @usb); sub pci_probe__real() { add_addons($pcitable_addons, map { - my %l; - @l{qw(vendor id subvendor subid pci_domain pci_bus pci_device pci_function pci_revision is_pciexpress media_type nice_media_type driver description)} = split "\t"; - $l{$_} = hex $l{$_} foreach qw(vendor id subvendor subid); - $l{bus} = 'PCI'; - $l{sysfs_device} = '/sys/bus/pci/devices/' . get_pci_sysfs_path(\%l); - \%l; + my $l = $_; + $l->{$_} = hex $l->{$_} foreach qw(vendor id subvendor subid); + $l->{bus} = 'PCI'; + $l->{sysfs_device} = '/sys/bus/pci/devices/' . get_pci_sysfs_path($l); + $l; } c::pci_probe()); } sub pci_probe() { @@ -870,13 +869,12 @@ sub usb_probe__real() { -e "/sys/kernel/debug/usb/devices" or return; add_addons($usbtable_addons, map { - my %l; - @l{qw(vendor id media_type driver description pci_bus pci_device usb_port)} = split "\t"; - $l{media_type} = join('|', grep { $_ ne '(null)' } split('\|', $l{media_type})); - $l{$_} = hex $l{$_} foreach qw(vendor id); - $l{sysfs_device} = "/sys/bus/usb/devices/$l{pci_bus}-" . ($l{usb_port} + 1); - $l{bus} = 'USB'; - \%l; + my $l = $_; + $l->{media_type} = join('|', grep { $_ ne '(null)' } split('\|', $l->{media_type})); + $l->{$_} = hex $l->{$_} foreach qw(vendor id); + $l->{sysfs_device} = "/sys/bus/usb/devices/$l->{pci_bus}-" . ($l->{usb_port} + 1); + $l->{bus} = 'USB'; + $l; } c::usb_probe()); } sub usb_probe() { @@ -967,9 +965,7 @@ sub dmi_probe() { if (arch() !~ /86/) { return []; } - $dmi_probe ||= [ map { - /(.*?)\t(.*)/ && { bus => 'DMI', driver => $1, description => $2 }; - } $> ? () : c::dmi_probe() ]; + $dmi_probe ||= $> ? [] : [ c::dmi_probe() ]; @$dmi_probe; } |