summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-11-25 09:55:54 +0100
committerGreg KH <gregkh@suse.de>2005-04-26 22:47:02 -0700
commit7757db1f859616171693ed9a54d1d16d3d5ed8e9 (patch)
treeb85e4e2ab01e5b5df3d06bb7e1477c0f2298e27f
parent9aa0485c97d1b02a39550e3be31c37520a0d0620 (diff)
[PATCH] don't call dev.d/ scripts twice, if directory = subsystem
The /etc/dev.d/input/input.dev was called twice for /dev/input/mouse. Skip the execution if we get a directory named after the subsystem. Move UDEV_NO_DEVD where it belongs.
-rw-r--r--udev.c4
-rw-r--r--udev_multiplex.c38
-rw-r--r--udev_start.c2
3 files changed, 23 insertions, 21 deletions
diff --git a/udev.c b/udev.c
index 9b0a00fb78..5ad7e425e6 100644
--- a/udev.c
+++ b/udev.c
@@ -180,7 +180,7 @@ int main(int argc, char *argv[], char *envp[])
retval = udev_add_device(&udev, class_dev);
/* run dev.d/ scripts if we created a node or changed a netif name */
- if (udev.devname[0] != '\0') {
+ if (udev_dev_d && udev.devname[0] != '\0') {
setenv("DEVNAME", udev.devname, 1);
udev_multiplex_directory(&udev, DEVD_DIR, DEVD_SUFFIX);
}
@@ -198,7 +198,7 @@ int main(int argc, char *argv[], char *envp[])
setenv("DEVNAME", udev.devname, 1);
}
/* run dev.d/ scripts if we're not instructed to ignore the event */
- if (udev.devname[0] != '\0') {
+ if (udev_dev_d && udev.devname[0] != '\0') {
setenv("DEVNAME", udev.devname, 1);
udev_multiplex_directory(&udev, DEVD_DIR, DEVD_SUFFIX);
}
diff --git a/udev_multiplex.c b/udev_multiplex.c
index 7e3dc656d6..3a484068ff 100644
--- a/udev_multiplex.c
+++ b/udev_multiplex.c
@@ -74,26 +74,28 @@ static int run_program(const char *filename, void *data)
void udev_multiplex_directory(struct udevice *udev, const char *basedir, const char *suffix)
{
char dirname[PATH_MAX];
- char devname[NAME_SIZE];
- char *temp;
-
- /* skip if UDEV_NO_DEVD is set */
- if (udev_dev_d == 0)
- return;
-
- strfieldcpy(devname, udev->name);
/* chop the device name up into pieces based on '/' */
- temp = strchr(devname, '/');
- while (temp != NULL) {
- temp[0] = '\0';
- snprintf(dirname, PATH_MAX, "%s/%s", basedir, devname);
- dirname[PATH_MAX-1] = '\0';
- call_foreach_file(run_program, dirname, suffix, udev);
-
- temp[0] = '/';
- ++temp;
- temp = strchr(temp, '/');
+ if (udev->name[0] != '\0') {
+ char devname[NAME_SIZE];
+ char *temp;
+
+ strfieldcpy(devname, udev->name);
+ temp = strchr(devname, '/');
+ while (temp != NULL) {
+ temp[0] = '\0';
+
+ /* don't call the subsystem directory here */
+ if (strcmp(devname, udev->subsystem) != 0) {
+ snprintf(dirname, PATH_MAX, "%s/%s", basedir, devname);
+ dirname[PATH_MAX-1] = '\0';
+ call_foreach_file(run_program, dirname, suffix, udev);
+ }
+
+ temp[0] = '/';
+ ++temp;
+ temp = strchr(temp, '/');
+ }
}
if (udev->name[0] != '\0') {
diff --git a/udev_start.c b/udev_start.c
index 129af4291a..1a86163cd5 100644
--- a/udev_start.c
+++ b/udev_start.c
@@ -109,7 +109,7 @@ static int add_device(char *devpath, char *subsystem)
udev_add_device(&udev, class_dev);
/* run dev.d/ scripts if we created a node or changed a netif name */
- if (udev.devname[0] != '\0') {
+ if (udev_dev_d && udev.devname[0] != '\0') {
setenv("DEVNAME", udev.devname, 1);
udev_multiplex_directory(&udev, DEVD_DIR, DEVD_SUFFIX);
}