SOURCES: udev_import_usermap (NEW) - new script
jpc
jpc at pld-linux.org
Wed Oct 19 08:39:33 CEST 2005
Author: jpc Date: Wed Oct 19 06:39:33 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- new script
---- Files affected:
SOURCES:
udev_import_usermap (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/udev_import_usermap
diff -u /dev/null SOURCES/udev_import_usermap:1.1
--- /dev/null Wed Oct 19 08:39:33 2005
+++ SOURCES/udev_import_usermap Wed Oct 19 08:39:28 2005
@@ -0,0 +1,77 @@
+#!/usr/bin/perl
+
+# From Mandriva CVS:
+# http://cvs.mandriva.com/cgi-bin/cvsweb.cgi/SPECS/udev/udev_import_usermap?rev=1.5
+
+# Copyright (C) 2005 Mandriva
+# Olivier Blin
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ at ARGV > 1 or die "usage: $0 [--no-modprobe] [--no-driver-agent] subsystem /path/to/map1.usermap [/path/to/map2.usermap]";
+
+my $agents_dir = '/etc/udev/agents.d';
+
+my %flags = (
+ idVendor => 0x0001,
+ idProduct => 0x0002,
+ bcdDevice_lo => 0x0004,
+ bcdDevice_hi => 0x0008,
+ bDeviceClass => 0x0010,
+ bDeviceSubClass => 0x0020,
+ bDeviceProtocol => 0x0040,
+ bInterfaceClass => 0x0080,
+ bInterfaceSubClass => 0x0100,
+ bInterfaceProtocol => 0x0200,
+);
+
+my ($no_modprobe, $no_driver_agent);
+
+ at ARGV = grep {
+ if ($_ eq "--no-modprobe") {
+ $no_modprobe = 1;
+ 0;
+ } elsif ($_ eq "--no-driver-agent") {
+ $no_driver_agent = 1;
+ 0;
+ } else {
+ 1;
+ }
+} @ARGV;
+
+my $subsystem = shift @ARGV;
+
+sub parse_usermap_line {
+ local $_ = shift;
+ /^#/ and next;
+ my %match;
+ @match{module, match_flags, idVendor, idProduct, bcdDevice_lo, bcdDevice_hi, bDeviceClass, bDeviceSubClass, bDeviceProtocol, bInterfaceClass, bInterfaceSubClass, bInterfaceProtocol, driver_info} =
+ /^(\S+)\s+0x(\w{2,})\s+0x(\w{2,})\s+0x(\w{2,})\s+0x(\w{2,})\s+0x(\w{2,})\s+0x(\w{2})\s+0x(\w{2})\s+0x(\w{2})\s+0x(\w{2})\s+0x(\w{2})\s+0x(\w{2})(?:\s+0x(\w{2,}))?/
+ or die qq(unable to parse line "$_");
+ $match{driver_info} ||= 0;
+
+ my @rule = qq(SUBSYSTEM=="$subsystem");
+ while (my ($key, $flag) = each(%flags)) {
+ hex($match{match_flags}) & $flag and push @rule, qq(SYSFS{$key}=="$match{$key}");
+ }
+ push @rule, qq(RUN+="/sbin/modprobe $match{module}") unless $no_modprobe;
+ push @rule, qq(RUN+="$agents_dir/$subsystem/$match{module}") unless $no_driver_agent;
+ print join(', ', @rule) . "\n";
+}
+
+foreach my $usermap (@ARGV) {
+ open(my $IN, $usermap . (-x $usermap && "|")) or die "unable to open usermap $usermap";
+ parse_usermap_line($_) foreach <$IN>;
+}
================================================================
More information about the pld-cvs-commit
mailing list