diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2005-04-02 17:45:35 +0200 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 23:55:00 -0700 |
commit | 821d0ec803a72841f173739f5b713fe847edab75 (patch) | |
tree | 4866ffc8b8c367cd6e62fd0616fffde01757e3e7 /udev.c | |
parent | e03a196a0d0680868ea230ab8f8d100ee90d0fa4 (diff) |
[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.
Diffstat (limited to 'udev.c')
-rw-r--r-- | udev.c | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -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); |