From 821d0ec803a72841f173739f5b713fe847edab75 Mon Sep 17 00:00:00 2001 From: "kay.sievers@vrfy.org" Date: Sat, 2 Apr 2005 17:45:35 +0200 Subject: [PATCH] add RUN key to be able to run rule based notification SUBSYSTEM=="block", RUN="/sbin/program" will execute the program only for block device events. ACTION="remove", SUBSYSTEM=="block", RUN"/sbin/program" will execute the program, if a block device is removed. --- udev.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'udev.c') diff --git a/udev.c b/udev.c index 23375b7a..5728be59 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); -- cgit 1.2.3-korg