X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev.c;h=6e0f7f1d0c535389c0ff56b1c2cbdc35213f1667;hb=761e5b476f8e69f41958a62ed787f5d886fa212e;hp=1c55ec14b8764ec898734cf2fd236deb056206b2;hpb=be4bedd16b934c8663f8c231f07f23091cde8261;p=elogind.git diff --git a/udev.c b/udev.c index 1c55ec14b..6e0f7f1d0 100644 --- a/udev.c +++ b/udev.c @@ -68,6 +68,7 @@ static void asmlinkage sig_handler(int signum) int main(int argc, char *argv[], char *envp[]) { struct udevice udev; + struct udev_rules rules; char path[PATH_SIZE]; const char *error; const char *action; @@ -95,7 +96,7 @@ int main(int argc, char *argv[], char *envp[]) sigaction(SIGTERM, &act, NULL); /* trigger timeout to prevent hanging processes */ - alarm(ALARM_TIMEOUT); + alarm(UDEV_ALARM_TIMEOUT); action = getenv("ACTION"); devpath = getenv("DEVPATH"); @@ -118,7 +119,7 @@ int main(int argc, char *argv[], char *envp[]) } udev_init_device(&udev, devpath, subsystem, action); - udev_rules_init(); + udev_rules_init(&rules, 0); if (udev.type == DEV_BLOCK || udev.type == DEV_CLASS || udev.type == DEV_NET) { /* handle device node */ @@ -143,30 +144,32 @@ int main(int argc, char *argv[], char *envp[]) if (udev.type == DEV_NET || udev.devt) { /* name device */ - udev_rules_get_name(&udev, class_dev); + udev_rules_get_name(&rules, &udev, class_dev); if (udev.ignore_device) { info("device event will be ignored"); + sysfs_close_class_device(class_dev); goto cleanup; } if (udev.name[0] == '\0') { info("device node creation supressed"); + sysfs_close_class_device(class_dev); goto cleanup; } - /* create node, store in db */ retval = udev_add_device(&udev, class_dev); } else { dbg("no dev-file found"); - udev_rules_get_run(&udev, NULL); + udev_rules_get_run(&rules, &udev, class_dev, NULL); if (udev.ignore_device) { info("device event will be ignored"); + sysfs_close_class_device(class_dev); goto cleanup; } } sysfs_close_class_device(class_dev); } else if (strcmp(action, "remove") == 0) { dbg("node remove"); - udev_rules_get_run(&udev, NULL); + udev_rules_get_run(&rules, &udev, NULL, NULL); if (udev.ignore_device) { dbg("device event will be ignored"); goto cleanup; @@ -193,7 +196,7 @@ int main(int argc, char *argv[], char *envp[]) } dbg("devices device opened '%s'", path); wait_for_devices_device(devices_dev, &error); - udev_rules_get_run(&udev, devices_dev); + udev_rules_get_run(&rules, &udev, NULL, devices_dev); sysfs_close_device(devices_dev); if (udev.ignore_device) { info("device event will be ignored"); @@ -201,7 +204,7 @@ int main(int argc, char *argv[], char *envp[]) } } else { dbg("default handling"); - udev_rules_get_run(&udev, NULL); + udev_rules_get_run(&rules, &udev, NULL, NULL); if (udev.ignore_device) { info("device event will be ignored"); goto cleanup;