]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: read firmware revision from udev
authorMilan Broz <gmazyland@gmail.com>
Thu, 22 Dec 2022 22:18:38 +0000 (23:18 +0100)
committerMilan Broz <gmazyland@gmail.com>
Fri, 23 Dec 2022 10:47:40 +0000 (11:47 +0100)
This supports more device types like NVMEs.

Signed-off-by: Milan Broz <gmazyland@gmail.com>
misc-utils/lsblk-properties.c
misc-utils/lsblk.c
misc-utils/lsblk.h

index 8acaad7a813f7b2cb81d543af8fff33b79834675..dc6f2896c968c378bb7cd18cced4cb10cedb099a 100644 (file)
@@ -38,6 +38,7 @@ void lsblk_device_free_properties(struct lsblk_devprop *p)
        free(p->model);
        free(p->partflags);
        free(p->idlink);
+       free(p->revision);
 
        free(p->mode);
        free(p->owner);
@@ -130,6 +131,9 @@ static struct lsblk_devprop *get_properties_by_udev(struct lsblk_device *ld)
                normalize_whitespace((unsigned char *) prop->serial);
        }
 
+       if ((data = udev_device_get_property_value(dev, "ID_REVISION")))
+               prop->revision = xstrdup(data);
+
        if ((data = udev_device_get_property_value(dev, "ID_MODEL_ENC"))) {
                prop->model = xstrdup(data);
                unhexmangle_string(prop->model);
@@ -254,6 +258,7 @@ static struct lsblk_devprop *get_properties_by_file(struct lsblk_device *ld)
                else if (lookup(buf, "ID_SCSI_SERIAL", &prop->serial)) ;
                else if (lookup(buf, "ID_SERIAL_SHORT", &prop->serial)) ;
                else if (lookup(buf, "ID_SERIAL", &prop->serial)) ;
+               else if (lookup(buf, "ID_REVISION", &prop->revision)) ;
 
                /* lsblk specific */
                else if (lookup(buf, "MODE", &prop->mode)) ;
index ea06afcd1092940e67b10ba29a708e053d94589b..bcd6441b0de39e242b18af1a0c6cb99ab2a481aa 100644 (file)
@@ -1013,8 +1013,13 @@ static char *device_get_data(
                }
                break;
        case COL_REV:
-               if (!device_is_partition(dev) && dev->nslaves == 0)
-                       ul_path_read_string(dev->sysfs, &str, "device/rev");
+               if (!device_is_partition(dev) && dev->nslaves == 0) {
+                       prop = lsblk_device_get_properties(dev);
+                       if (prop && prop->revision)
+                               str = xstrdup(prop->revision);
+                       else
+                               ul_path_read_string(dev->sysfs, &str, "device/rev");
+               }
                break;
        case COL_VENDOR:
                if (!device_is_partition(dev) && dev->nslaves == 0)
index c00723f1aecf47de555aa0747d70d4bd352ed48a..e3e89e2860cc75eefa1093d488ec90bfd13a41a7 100644 (file)
@@ -79,6 +79,7 @@ struct lsblk_devprop {
        char *serial;           /* disk serial number */
        char *model;            /* disk model */
        char *idlink;           /* /dev/disk/by-id/<name> */
+       char *revision;         /* firmware revision/version */
 
        /* lsblk specific (for --sysroot only)  */
        char *owner;            /* user name */