summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/udev/udev-124/udevtrigger_add_devname_filtering.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/udev/udev-124/udevtrigger_add_devname_filtering.patch')
-rw-r--r--meta/recipes-core/udev/udev-124/udevtrigger_add_devname_filtering.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/meta/recipes-core/udev/udev-124/udevtrigger_add_devname_filtering.patch b/meta/recipes-core/udev/udev-124/udevtrigger_add_devname_filtering.patch
new file mode 100644
index 0000000000..5182542461
--- /dev/null
+++ b/meta/recipes-core/udev/udev-124/udevtrigger_add_devname_filtering.patch
@@ -0,0 +1,99 @@
1diff -pru udev-124.orig/udevtrigger.c udev-124/udevtrigger.c
2--- udev-124.orig/udevtrigger.c 2008-06-12 06:24:30.000000000 +0100
3+++ udev-124/udevtrigger.c 2008-07-07 15:10:09.000000000 +0100
4@@ -42,6 +42,8 @@ static int dry_run;
5 LIST_HEAD(device_list);
6 LIST_HEAD(filter_subsystem_match_list);
7 LIST_HEAD(filter_subsystem_nomatch_list);
8+LIST_HEAD(filter_kernel_match_list);
9+LIST_HEAD(filter_kernel_nomatch_list);
10 LIST_HEAD(filter_attr_match_list);
11 LIST_HEAD(filter_attr_nomatch_list);
12 static int sock = -1;
13@@ -331,6 +333,26 @@ static int attr_match(const char *path,
14 return 0;
15 }
16
17+static int kernel_filtered(const char *kernel)
18+{
19+ struct name_entry *loop_name;
20+
21+ /* skip devices matching the prohibited kernel device names */
22+ list_for_each_entry(loop_name, &filter_kernel_nomatch_list, node)
23+ if (fnmatch(loop_name->name, kernel, 0) == 0)
24+ return 1;
25+
26+ /* skip devices not matching the listed kernel device names */
27+ if (!list_empty(&filter_kernel_match_list)) {
28+ list_for_each_entry(loop_name, &filter_kernel_match_list, node)
29+ if (fnmatch(loop_name->name, kernel, 0) == 0)
30+ return 0;
31+ return 1;
32+ }
33+
34+ return 0;
35+}
36+
37 static int attr_filtered(const char *path)
38 {
39 struct name_entry *loop_name;
40@@ -409,6 +431,9 @@ static void scan_subsystem(const char *s
41 if (dent2->d_name[0] == '.')
42 continue;
43
44+ if (kernel_filtered(dent2->d_name))
45+ continue;
46+
47 strlcpy(dirname2, dirname, sizeof(dirname2));
48 strlcat(dirname2, "/", sizeof(dirname2));
49 strlcat(dirname2, dent2->d_name, sizeof(dirname2));
50@@ -465,6 +490,9 @@ static void scan_block(void)
51 if (!strcmp(dent2->d_name,"device"))
52 continue;
53
54+ if (kernel_filtered(dent2->d_name))
55+ continue;
56+
57 strlcpy(dirname2, dirname, sizeof(dirname2));
58 strlcat(dirname2, "/", sizeof(dirname2));
59 strlcat(dirname2, dent2->d_name, sizeof(dirname2));
60@@ -576,6 +604,8 @@ int udevtrigger(int argc, char *argv[],
61 { "subsystem-nomatch", 1, NULL, 'S' },
62 { "attr-match", 1, NULL, 'a' },
63 { "attr-nomatch", 1, NULL, 'A' },
64+ { "kernel-match", 1, NULL, 'k' },
65+ { "kernel-nomatch", 1, NULL, 'K' },
66 { "env", 1, NULL, 'e' },
67 {}
68 };
69@@ -622,6 +652,12 @@ int udevtrigger(int argc, char *argv[],
70 case 'A':
71 name_list_add(&filter_attr_nomatch_list, optarg, 0);
72 break;
73+ case 'k':
74+ name_list_add(&filter_kernel_match_list, optarg, 0);
75+ break;
76+ case 'K':
77+ name_list_add(&filter_kernel_nomatch_list, optarg, 0);
78+ break;
79 case 'h':
80 printf("Usage: udevadm trigger OPTIONS\n"
81 " --verbose print the list of devices while running\n"
82@@ -632,6 +668,8 @@ int udevtrigger(int argc, char *argv[],
83 " --env=<KEY>=<value> pass an additional key (works only with --socket=)\n"
84 " --subsystem-match=<subsystem> trigger devices from a matching subystem\n"
85 " --subsystem-nomatch=<subsystem> exclude devices from a matching subystem\n"
86+ " --kernel-match=<subsystem> trigger devices from a matching kernel device name\n"
87+ " --kernel-nomatch=<subsystem> exclude devices from a matching kernel device name\n"
88 " --attr-match=<file[=<value>]> trigger devices with a matching sysfs\n"
89 " attribute\n"
90 " --attr-nomatch=<file[=<value>]> exclude devices with a matching sysfs\n"
91@@ -701,6 +739,8 @@ int udevtrigger(int argc, char *argv[],
92 exit:
93 name_list_cleanup(&filter_subsystem_match_list);
94 name_list_cleanup(&filter_subsystem_nomatch_list);
95+ name_list_cleanup(&filter_kernel_match_list);
96+ name_list_cleanup(&filter_kernel_nomatch_list);
97 name_list_cleanup(&filter_attr_match_list);
98 name_list_cleanup(&filter_attr_nomatch_list);
99