chiark / gitweb /
fix $attr{[<subsystem>/<sysname>]<attribute>} substitution
[elogind.git] / udev / udev-event.c
index fcb999370974db5624dcc510c8833b83e46adb47..02c5c99dc1b4b6cfc2b7b46497c3ac1bb2dbc435 100644 (file)
@@ -291,16 +291,21 @@ found:
                                err(event->udev, "missing file parameter for attr\n");
                        else {
                                const char *val;
-                               char value[UTIL_NAME_SIZE] = "";
+                               char value[UTIL_NAME_SIZE];
                                size_t size;
 
+                               value[0] = '\0';
+                               /* read the value specified by [usb/]*/
                                util_resolve_subsys_kernel(event->udev, attr, value, sizeof(value), 1);
 
-                               val = udev_device_get_sysattr_value(event->dev, attr);
-                               if (val != NULL)
-                                       util_strlcpy(value, val, sizeof(value));
+                               /* try to read attribute of the current device */
+                               if (value[0] == '\0') {
+                                       val = udev_device_get_sysattr_value(event->dev, attr);
+                                       if (val != NULL)
+                                               util_strlcpy(value, val, sizeof(value));
+                               }
 
-                               /* try the current device, other matches may have selected */
+                               /* try to read the attribute of the parent device, other matches have selected */
                                if (value[0] == '\0' && event->dev_parent != NULL && event->dev_parent != event->dev) {
                                        val = udev_device_get_sysattr_value(event->dev_parent, attr);
                                        if (val != NULL)