- pid = fork();
- switch(pid) {
- case 0:
- /* child */
- close(STDOUT_FILENO);
-
- /* dup write side of pipe to STDOUT */
- dup(fds[1]);
-
- dbg("executing /sbin/udev '%s'", path);
- retval = execl("/sbin/udev", "/sbin/udev", path, NULL);
-
- info("execution of '%s' failed", path);
- exit(1);
- case -1:
- dbg("fork failed");
- return -1;
- default:
- /* parent reads from fds[0] */
- close(fds[1]);
- retval = 0;
- while (1) {
- res = read(fds[0], buffer, sizeof(buffer) - 1);
- if (res <= 0)
+
+ udev_set_values(&udev, devpath, subsystem);
+ udev_add_device(&udev, class_dev);
+
+ /* run scripts */
+ dev_d_execute(&udev);
+
+ sysfs_close_class_device(class_dev);
+
+ return 0;
+}
+
+static void exec_list(struct list_head *device_list)
+{
+ struct device *loop_device;
+ struct device *tmp_device;
+ int i;
+
+ /* handle the "first" type devices first */
+ list_for_each_entry_safe(loop_device, tmp_device, device_list, list) {
+ for (i=0; first_list[i] != NULL; i++) {
+ if (strncmp(loop_device->path, first_list[i], strlen(first_list[i])) == 0) {
+ add_device(loop_device->path, loop_device->subsys);
+ list_del(&loop_device->list);
+ free(loop_device);