-static char udev_log_env[32];
-
-static LIST_HEAD(exec_list);
-static LIST_HEAD(running_list);
-
-static void asmlinkage udev_event_sig_handler(int signum)
-{
- if (signum == SIGALRM)
- exit(1);
-}
-
-static int udev_event_process(struct udevd_uevent_msg *msg)
-{
- struct sigaction act;
- struct udevice *udevice;
- int i;
- int retval;
-
- /* set signal handlers */
- memset(&act, 0x00, sizeof(act));
- act.sa_handler = (void (*)(int)) udev_event_sig_handler;
- sigemptyset (&act.sa_mask);
- act.sa_flags = 0;
- sigaction(SIGALRM, &act, NULL);
-
- /* reset to default */
- act.sa_handler = SIG_DFL;
- sigaction(SIGINT, &act, NULL);
- sigaction(SIGTERM, &act, NULL);
- sigaction(SIGCHLD, &act, NULL);
- sigaction(SIGHUP, &act, NULL);
-
- /* trigger timeout to prevent hanging processes */
- alarm(UDEV_EVENT_TIMEOUT);
-
- /* reconstruct event environment from message */
- for (i = 0; msg->envp[i]; i++)
- putenv(msg->envp[i]);
-
- udevice = udev_device_init(msg->udev);
- if (udevice == NULL)
- return -1;
- util_strlcpy(udevice->action, msg->action, sizeof(udevice->action));
- sysfs_device_set_values(udevice->udev, udevice->dev, msg->devpath, msg->subsystem, msg->driver);
- udevice->devpath_old = msg->devpath_old;
- udevice->devt = msg->devt;
-
- retval = udev_device_event(&rules, udevice);
-
- /* rules may change/disable the timeout */
- if (udevice->event_timeout >= 0)
- alarm(udevice->event_timeout);
-
- /* run programs collected by RUN-key*/
- if (retval == 0 && !udevice->ignore_device && udev_get_run(msg->udev))
- retval = udev_rules_run(udevice);
-
- udev_device_cleanup(udevice);
- return retval;
-}