summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--udev/lib/exported_symbols1
-rw-r--r--udev/lib/libudev-device.c14
-rw-r--r--udev/lib/libudev.h1
-rw-r--r--udev/udev-event.c7
-rw-r--r--udev/udev-rules.c5
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 = "";