From: Tom Gundersen Date: Fri, 6 Mar 2015 17:30:09 +0000 (+0100) Subject: libudev: introduce udev_device_properties_copy() X-Git-Tag: v219.0~382 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=1cd0a77022a4da17d1274f8f776b63e72c99fb05 libudev: introduce udev_device_properties_copy() To copy properties from one device to another. Drop the equivalent functionality from udevd. --- diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c index 242a0d89b..2604ad705 100644 --- a/src/libudev/libudev-device.c +++ b/src/libudev/libudev-device.c @@ -2030,3 +2030,18 @@ struct udev_device *udev_device_new_from_nulstr(struct udev *udev, char *nulstr, return device; } + +int udev_device_copy_properties(struct udev_device *dst, struct udev_device *src) { + struct udev_list_entry *entry; + + for ((entry = udev_device_get_properties_list_entry(src)); entry; entry = udev_list_entry_get_next(entry)) { + const char *key, *value; + + key = udev_list_entry_get_name(entry); + value = udev_list_entry_get_value(entry); + + udev_device_add_property(dst, key, value); + } + + return 0; +} diff --git a/src/libudev/libudev-private.h b/src/libudev/libudev-private.h index 9153e67cc..c0f9fbe76 100644 --- a/src/libudev/libudev-private.h +++ b/src/libudev/libudev-private.h @@ -39,6 +39,7 @@ int udev_get_rules_path(struct udev *udev, char **path[], usec_t *ts_usec[]); /* libudev-device.c */ struct udev_device *udev_device_new_from_nulstr(struct udev *udev, char *nulstr, ssize_t buflen); struct udev_device *udev_device_shallow_clone(struct udev_device *old_device); +int udev_device_copy_properties(struct udev_device *dst, struct udev_device *src); 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); diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 67fb1f78f..b96cf737f 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -819,18 +819,8 @@ void udev_event_execute_rules(struct udev_event *event, } if (major(udev_device_get_devnum(dev)) == 0 && - streq(udev_device_get_action(dev), "move")) { - struct udev_list_entry *entry; - - for ((entry = udev_device_get_properties_list_entry(event->dev_db)); entry; entry = udev_list_entry_get_next(entry)) { - const char *key, *value; - - key = udev_list_entry_get_name(entry); - value = udev_list_entry_get_value(entry); - - udev_device_add_property(dev, key, value); - } - } + streq(udev_device_get_action(dev), "move")) + udev_device_copy_properties(dev, event->dev_db); udev_rules_apply_to_event(rules, event, timeout_usec, timeout_warn_usec,