summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2015-03-06 18:30:09 +0100
committerTom Gundersen <teg@jklm.no>2015-03-12 11:59:04 +0100
commit1cd0a77022a4da17d1274f8f776b63e72c99fb05 (patch)
tree35662cbbbf0f62cdf131e6e5a2f4e20eaa9bd239
parent4db7e6d781c2d9bba4e9124d26e811dd4addc1c5 (diff)
downloadsystemd-1cd0a77022a4da17d1274f8f776b63e72c99fb05.tar.gz
libudev: introduce udev_device_properties_copy()
To copy properties from one device to another. Drop the equivalent functionality from udevd.
-rw-r--r--src/libudev/libudev-device.c15
-rw-r--r--src/libudev/libudev-private.h1
-rw-r--r--src/udev/udev-event.c14
3 files changed, 18 insertions, 12 deletions
diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
index 242a0d89b6..2604ad7051 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 9153e67cc4..c0f9fbe763 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 67fb1f78f5..b96cf737f5 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,