- snprintf(mode_string, sizeof(mode_string), "--mode=%#o", mode);
- snprintf(type_string, sizeof(type_string), "%c", type);
- snprintf(major_string, sizeof(major_string), "%d", major);
- snprintf(minor_string, sizeof(minor_string), "%d", minor);
-
- argv[0] = MKNOD;
- argv[1] = mode_string;
- argv[2] = filename;
- argv[3] = type_string;
- argv[4] = major_string;
- argv[5] = minor_string;
- argv[6] = NULL;
- dbg ("executing %s %s %s %s %s %s",
- argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
- switch (fork()) {
- case 0:
- /* we are the child, so lets run the program */
- execv (MKNOD, argv);
- exit(0);
- break;
- case (-1):
- dbg ("fork failed.");
- retval = -EFAULT;
- break;
- default:
- break;
+ /* set signal handlers */
+ act.sa_handler = sig_handler;
+ sigemptyset (&act.sa_mask);
+ act.sa_flags = SA_RESTART;
+ sigaction(SIGINT, &act, NULL);
+ sigaction(SIGTERM, &act, NULL);
+
+ if (strcmp(action, "add") == 0) {
+ /* Already done. */
+ if (!is_udevstart)
+ namedev_init();
+ retval = udev_add_device(devpath, subsystem, nofake);
+ goto action_done;