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