X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_multiplex.c;h=3a484068ff76a849e806d251245ecbde4192acbe;hp=7e3dc656d6d7d48edcb3ff284bb805c8409a0d26;hb=fd3eeb7502d9ed52569bdb3e01a50ecbc132035e;hpb=9af5bb2f8fdbf54c064ddbd319d61092f28a4132 diff --git a/udev_multiplex.c b/udev_multiplex.c index 7e3dc656d..3a484068f 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') {