diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c index 2daf4ddd57..76267a1e74 100644 --- a/src/libsystemd/sd-device/device-private.c +++ b/src/libsystemd/sd-device/device-private.c @@ -712,13 +712,13 @@ int device_copy_properties(sd_device *device_dst, sd_device *device_src) { if (r < 0) return r; - ORDERED_HASHMAP_FOREACH_KEY(property, value, device_src->properties_db, i) { + ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties_db, i) { r = device_add_property_aux(device_dst, property, value, true); if (r < 0) return r; } - ORDERED_HASHMAP_FOREACH_KEY(property, value, device_src->properties, i) { + ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties, i) { r = device_add_property_aux(device_dst, property, value, false); if (r < 0) return r; diff --git a/src/libsystemd/sd-device/test-sd-device-monitor.c b/src/libsystemd/sd-device/test-sd-device-monitor.c index 287100d5d3..aa1edaaf3c 100644 --- a/src/libsystemd/sd-device/test-sd-device-monitor.c +++ b/src/libsystemd/sd-device/test-sd-device-monitor.c @@ -157,6 +157,15 @@ static void test_sd_device_monitor_filter_remove(sd_device *device) { assert_se(sd_event_loop(sd_device_monitor_get_event(monitor_client)) == 100); } +static void test_device_copy_properties(sd_device *device) { + _cleanup_(sd_device_unrefp) sd_device *copy = NULL; + + assert_se(device_shallow_clone(device, ©) >= 0); + assert_se(device_copy_properties(copy, device) >= 0); + + test_send_receive_one(copy, false, false, false); +} + int main(int argc, char *argv[]) { _cleanup_(sd_device_unrefp) sd_device *loopback = NULL, *sda = NULL; int r; @@ -186,6 +195,7 @@ int main(int argc, char *argv[]) { test_subsystem_filter(loopback); test_sd_device_monitor_filter_remove(loopback); + test_device_copy_properties(loopback); r = sd_device_new_from_subsystem_sysname(&sda, "block", "sda"); if (r < 0) {