- /* no rule, use kernel provided name */
- if (event->name == NULL) {
- if (udev_device_get_knodename(dev) != NULL) {
- event->name = strdup(udev_device_get_knodename(dev));
- info(event->udev, "no node name set, will use kernel supplied name '%s'\n", event->name);
- } else {
- event->name = strdup(udev_device_get_sysname(event->dev));
- info(event->udev, "no node name set, will use device name '%s'\n", event->name);
- }
- }
-
- /* something went wrong */
- if (event->name == NULL) {
- err(event->udev, "no node name for '%s'\n", udev_device_get_sysname(event->dev));
- goto exit_add;
- }
-
- /* set device node name */
- util_strscpyl(filename, sizeof(filename), udev_get_dev_path(event->udev), "/", event->name, NULL);
- udev_device_set_devnode(dev, filename);
-
- /* write current database entry */
- udev_device_update_db(dev);
-
- /* remove/update possible left-over symlinks from old database entry */
- if (dev_old != NULL)
- udev_node_update_old_links(dev, dev_old);
-
- /* create new node and symlinks */
- err = udev_node_add(dev, event->mode, event->uid, event->gid);
-exit_add:
- if (delete_kdevnode && udev_device_get_knodename(dev) != NULL) {
- struct stat stats;
-
- util_strscpyl(filename, sizeof(filename),
- udev_get_dev_path(event->udev), "/", udev_device_get_knodename(dev), NULL);
- if (stat(filename, &stats) == 0 && stats.st_rdev == udev_device_get_devnum(dev)) {
- unlink(filename);
- util_delete_path(event->udev, filename);
- info(event->udev, "removed kernel created node '%s'\n", filename);
- }