+ /* trigger timeout to prevent hanging processes */
+ alarm(ALARM_TIMEOUT);
+
+ /* let the executed programs know if we handle the whole hotplug event */
+ managed_event = manage_hotplug_event();
+ if (managed_event)
+ setenv("MANAGED_EVENT", "1", 1);
+
+ action = getenv("ACTION");
+ devpath = getenv("DEVPATH");
+ subsystem = getenv("SUBSYSTEM");
+ /* older kernels passed the SUBSYSTEM only as argument */
+ if (!subsystem && argc == 2)
+ subsystem = argv[1];
+
+ udev_init_device(&udev, devpath, subsystem, action);
+
+ if (!action || !subsystem || !devpath) {
+ err("action, subsystem or devpath missing");
+ goto hotplug;
+ }
+
+ /* export logging flag, as called scripts may want to do the same as udev */
+ if (udev_log_priority) {
+ char priority[32];
+
+ sprintf(priority, "%i", udev_log_priority);
+ setenv("UDEV_LOG", priority, 1);
+ }
+
+ if (udev.type == DEV_BLOCK || udev.type == DEV_CLASS || udev.type == DEV_NET) {
+ udev_rules_init();