1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-08 21:17:47 +03:00

udev: event - introduce and use internal udev_device_shallow_clone()

This commit is contained in:
Tom Gundersen 2015-01-26 14:12:45 +01:00
parent 243d182543
commit fa639f3ae7
3 changed files with 23 additions and 4 deletions

View File

@ -1944,3 +1944,24 @@ int udev_device_rename(struct udev_device *udev_device, const char *name)
return 0;
}
struct udev_device *udev_device_shallow_clone(struct udev_device *old_device)
{
struct udev_device *device;
if (old_device == NULL)
return NULL;
device = udev_device_new(old_device->udev);
if (!device) {
errno = ENOMEM;
return NULL;
}
udev_device_set_syspath(device, udev_device_get_syspath(old_device));
udev_device_set_subsystem(device, udev_device_get_subsystem(old_device));
udev_device_set_devnum(device, udev_device_get_devnum(old_device));
return device;
}

View File

@ -38,6 +38,7 @@ int udev_get_rules_path(struct udev *udev, char **path[], usec_t *ts_usec[]);
/* libudev-device.c */
struct udev_device *udev_device_new(struct udev *udev);
struct udev_device *udev_device_shallow_clone(struct udev_device *old_device);
mode_t udev_device_get_devnode_mode(struct udev_device *udev_device);
uid_t udev_device_get_devnode_uid(struct udev_device *udev_device);
gid_t udev_device_get_devnode_gid(struct udev_device *udev_device);

View File

@ -809,11 +809,8 @@ void udev_event_execute_rules(struct udev_event *event,
if (major(udev_device_get_devnum(dev)) != 0)
udev_node_remove(dev);
} else {
event->dev_db = udev_device_new(event->udev);
event->dev_db = udev_device_shallow_clone(dev);
if (event->dev_db != NULL) {
udev_device_set_syspath(event->dev_db, udev_device_get_syspath(dev));
udev_device_set_subsystem(event->dev_db, udev_device_get_subsystem(dev));
udev_device_set_devnum(event->dev_db, udev_device_get_devnum(dev));
udev_device_read_db(event->dev_db, NULL);
udev_device_set_info_loaded(event->dev_db);