- if (event->name != NULL && event->name[0] == '\0') {
- info(event->udev, "device node creation supressed\n");
- goto exit;
- }
-
- if (event->name == NULL) {
- info(event->udev, "no node name set, will use kernel name '%s'\n",
- udev_device_get_sysname(event->dev));
- event->name = strdup(udev_device_get_sysname(event->dev));
- if (event->name == NULL)
- goto exit;
- }
-
- /* set device node name */
- util_strlcpy(filename, udev_get_dev_path(event->udev), sizeof(filename));
- util_strlcat(filename, "/", sizeof(filename));
- util_strlcat(filename, event->name, sizeof(filename));
- udev_device_set_devnode(dev, filename);
-
- /* read current database entry */
- dev_old = udev_device_new_from_syspath(event->udev, udev_device_get_syspath(dev));
- if (dev_old != NULL) {
- udev_device_read_db(dev_old);
- udev_device_set_info_loaded(dev_old);
- }
-
- /* update database, create node and symlinks */
- udev_device_update_db(dev);
- err = udev_node_add(dev, event->mode, event->uid, event->gid, event->test);
-
- /* remove/update possible left-over symlinks from old database entry */
- if (dev_old != NULL) {
- udev_node_update_old_links(dev, dev_old, event->test);
- udev_device_unref(dev_old);
+ if (major(udev_device_get_devnum(dev)) != 0)
+ err = udev_node_remove(dev);
+ } else {
+ event->dev_db = udev_device_new_from_syspath(event->udev, udev_device_get_syspath(dev));
+ if (event->dev_db != NULL) {
+ udev_device_read_db(event->dev_db);
+ udev_device_set_info_loaded(event->dev_db);
+
+ /* disable watch during event processing */
+ if (major(udev_device_get_devnum(dev)) != 0)
+ udev_watch_end(event->udev, event->dev_db);