diff options
-rw-r--r-- | udev/lib/exported_symbols | 1 | ||||
-rw-r--r-- | udev/lib/libudev-device.c | 14 | ||||
-rw-r--r-- | udev/lib/libudev.h | 1 | ||||
-rw-r--r-- | udev/udev-event.c | 7 | ||||
-rw-r--r-- | udev/udev-rules.c | 5 |
5 files changed, 18 insertions, 10 deletions
diff --git a/udev/lib/exported_symbols b/udev/lib/exported_symbols index abf5051791..86ab1059fe 100644 --- a/udev/lib/exported_symbols +++ b/udev/lib/exported_symbols @@ -29,6 +29,7 @@ udev_device_get_subsystem udev_device_get_devtype udev_device_get_devlinks_list_entry udev_device_get_properties_list_entry +udev_device_get_properties_value udev_device_get_action udev_device_get_driver udev_device_get_devnum diff --git a/udev/lib/libudev-device.c b/udev/lib/libudev-device.c index 0cb5921281..a7722b3f6e 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -1059,6 +1059,20 @@ struct udev_list_entry *udev_device_add_property_from_string(struct udev_device return udev_device_add_property(udev_device, name, val); } +const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key) +{ + struct udev_list_entry *list_entry; + + if (udev_device == NULL) + return NULL; + if (key == NULL) + return NULL; + + list_entry = udev_device_get_properties_list_entry(udev_device); + list_entry = udev_list_entry_get_by_name(list_entry, key); + return udev_list_entry_get_value(list_entry); +} + #define ENVP_SIZE 128 #define MONITOR_BUF_SIZE 4096 static int update_envp_monitor_buf(struct udev_device *udev_device) diff --git a/udev/lib/libudev.h b/udev/lib/libudev.h index 6d6618a9ec..58d7ef98c4 100644 --- a/udev/lib/libudev.h +++ b/udev/lib/libudev.h @@ -75,6 +75,7 @@ extern const char *udev_device_get_sysnum(struct udev_device *udev_device); extern const char *udev_device_get_devnode(struct udev_device *udev_device); extern struct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device *udev_device); extern struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device); +extern const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key); extern const char *udev_device_get_driver(struct udev_device *udev_device); extern dev_t udev_device_get_devnum(struct udev_device *udev_device); extern const char *udev_device_get_action(struct udev_device *udev_device); diff --git a/udev/udev-event.c b/udev/udev-event.c index 93a65e7352..9e82f8de42 100644 --- a/udev/udev-event.c +++ b/udev/udev-event.c @@ -421,14 +421,9 @@ found: dbg(event->udev, "missing attribute\n"); break; } else { - struct udev_list_entry *list_entry; const char *value; - list_entry = udev_device_get_properties_list_entry(event->dev); - list_entry = udev_list_entry_get_by_name(list_entry, attr); - if (list_entry == NULL) - break; - value = udev_list_entry_get_value(list_entry); + value = udev_device_get_property_value(event->dev, attr); if (value == NULL) break; dbg(event->udev, "substitute env '%s=%s'\n", attr, value); diff --git a/udev/udev-rules.c b/udev/udev-rules.c index 9861a88a52..7ba52208fb 100644 --- a/udev/udev-rules.c +++ b/udev/udev-rules.c @@ -2059,13 +2059,10 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event break; case TK_M_ENV: { - struct udev_list_entry *list_entry; const char *key_name = &rules->buf[cur->key.attr_off]; const char *value; - list_entry = udev_device_get_properties_list_entry(event->dev); - list_entry = udev_list_entry_get_by_name(list_entry, key_name); - value = udev_list_entry_get_value(list_entry); + value = udev_device_get_property_value(event->dev, key_name); if (value == NULL) { dbg(event->udev, "ENV{%s} is not set, treat as empty\n", key_name); value = ""; |