X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=udev.c;h=5728be59e0d435c8107cfa803957cc971854ead8;hb=821d0ec803a72841f173739f5b713fe847edab75;hp=23375b7a3e3af118f7a3a17464a01ccf681edb4c;hpb=e03a196a0d0680868ea230ab8f8d100ee90d0fa4;p=elogind.git diff --git a/udev.c b/udev.c index 23375b7a3..5728be59e 100644 --- a/udev.c +++ b/udev.c @@ -157,6 +157,8 @@ int main(int argc, char *argv[], char *envp[]) } if (udev.type == DEV_BLOCK || udev.type == DEV_CLASS || udev.type == DEV_NET) { + udev_rules_init(); + if (strcmp(action, "add") == 0) { /* wait for sysfs and possibly add node */ dbg("udev add"); @@ -178,9 +180,6 @@ int main(int argc, char *argv[], char *envp[]) wait_for_class_device(class_dev, &error); - /* init rules */ - udev_rules_init(); - /* name, create node, store in db */ retval = udev_add_device(&udev, class_dev); @@ -195,10 +194,24 @@ int main(int argc, char *argv[], char *envp[]) goto hotplug; } + udev_rules_get_run(&udev); + if (udev.ignore_device) { + dbg("device event will be ignored"); + goto hotplug; + } + /* get node from db, remove db-entry, delete created node */ retval = udev_remove_device(&udev); } + if (udev_run && !list_empty(&udev.run_list)) { + struct name_entry *name_loop; + + dbg("executing run list"); + list_for_each_entry(name_loop, &udev.run_list, node) + execute_command(name_loop->name, udev.subsystem); + } + /* run dev.d/ scripts if we created/deleted a node or changed a netif name */ if (udev.devname[0] != '\0') { setenv("DEVNAME", udev.devname, 1);