diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c index bcc2018c6f..6caea8ecce 100644 --- a/src/udev/udev-builtin.c +++ b/src/udev/udev-builtin.c @@ -154,3 +154,26 @@ int udev_builtin_add_propertyf(sd_device *dev, bool test, const char *key, const return udev_builtin_add_property(dev, test, key, val); } + +int udev_builtin_import_property(sd_device *dev, sd_device *src, bool test, const char *key) { + const char *val; + int r; + + assert(dev); + assert(key); + + if (!src) + return 0; + + r = sd_device_get_property_value(src, key, &val); + if (r == -ENOENT) + return 0; + if (r < 0) + return log_device_debug_errno(src, r, "Failed to get property \"%s\", ignoring: %m", key); + + r = udev_builtin_add_property(dev, test, key, val); + if (r < 0) + return r; + + return 1; +} diff --git a/src/udev/udev-builtin.h b/src/udev/udev-builtin.h index fcd41d615d..c7a48b0201 100644 --- a/src/udev/udev-builtin.h +++ b/src/udev/udev-builtin.h @@ -84,5 +84,6 @@ void udev_builtin_list(void); bool udev_builtin_should_reload(void); int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val); int udev_builtin_add_propertyf(sd_device *dev, bool test, const char *key, const char *valf, ...) _printf_(4, 5); +int udev_builtin_import_property(sd_device *dev, sd_device *src, bool test, const char *key); int udev_builtin_hwdb_lookup(sd_device *dev, const char *prefix, const char *modalias, const char *filter, bool test);