]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: add PARTN column
authorKarel Zak <kzak@redhat.com>
Mon, 5 Sep 2022 07:01:42 +0000 (09:01 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 5 Sep 2022 07:08:53 +0000 (09:08 +0200)
Add PARTN column, the source for this column is ID_PART_ENTRY_NUMBER
from udev db, the original source of this information comes from
libblkid. There is also another PARTN in udevdb, but it's based on
data from kernel uevent.

Fixes: https://github.com/util-linux/util-linux/issues/1787
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/lsblk-properties.c
misc-utils/lsblk.c
misc-utils/lsblk.h

index f1bbf9a5831842ca424f634c18e3f21f7328063a..8acaad7a813f7b2cb81d543af8fff33b79834675 100644 (file)
@@ -32,6 +32,7 @@ void lsblk_device_free_properties(struct lsblk_devprop *p)
        free(p->parttype);
        free(p->partuuid);
        free(p->partlabel);
+       free(p->partn);
        free(p->wwn);
        free(p->serial);
        free(p->model);
@@ -106,6 +107,8 @@ static struct lsblk_devprop *get_properties_by_udev(struct lsblk_device *ld)
                prop->parttype = xstrdup(data);
        if ((data = udev_device_get_property_value(dev, "ID_PART_ENTRY_UUID")))
                prop->partuuid = xstrdup(data);
+       if ((data = udev_device_get_property_value(dev, "ID_PART_ENTRY_NUMBER")))
+               prop->partn = xstrdup(data);
        if ((data = udev_device_get_property_value(dev, "ID_PART_ENTRY_FLAGS")))
                prop->partflags = xstrdup(data);
 
@@ -243,6 +246,7 @@ static struct lsblk_devprop *get_properties_by_file(struct lsblk_device *ld)
                else if (lookup(buf, "ID_PART_ENTRY_TYPE", &prop->parttype)) ;
                else if (lookup(buf, "ID_PART_ENTRY_UUID", &prop->partuuid)) ;
                else if (lookup(buf, "ID_PART_ENTRY_FLAGS", &prop->partflags)) ;
+               else if (lookup(buf, "ID_PART_ENTRY_NUMBER", &prop->partn)) ;
                else if (lookup(buf, "ID_MODEL", &prop->model)) ;
                else if (lookup(buf, "ID_WWN_WITH_EXTENSION", &prop->wwn)) ;
                else if (lookup(buf, "ID_WWN", &prop->wwn)) ;
@@ -321,6 +325,8 @@ static struct lsblk_devprop *get_properties_by_blkid(struct lsblk_device *dev)
                        prop->partlabel = xstrdup(data);
                if (!blkid_probe_lookup_value(pr, "PART_ENTRY_FLAGS", &data, NULL))
                        prop->partflags = xstrdup(data);
+               if (!blkid_probe_lookup_value(pr, "PART_ENTRY_NUMBER", &data, NULL))
+                       prop->partn = xstrdup(data);
 
                DBG(DEV, ul_debugobj(dev, "%s: found blkid properties", dev->name));
        }
index 9873922187c387b4bcdbaa48bba2543b70aecf1d..655463e41878c94d698fd74a6d8315f59d862f3c 100644 (file)
@@ -97,6 +97,7 @@ enum {
        COL_OWNER,
        COL_PARTFLAGS,
        COL_PARTLABEL,
+       COL_PARTN,
        COL_PARTTYPE,
        COL_PARTTYPENAME,
        COL_PARTUUID,
@@ -198,6 +199,7 @@ static struct colinfo infos[] = {
        [COL_OWNER] = { "OWNER", 0.1, SCOLS_FL_TRUNC, N_("user name"), },
        [COL_PARTFLAGS] = { "PARTFLAGS", 36,  0, N_("partition flags") },
        [COL_PARTLABEL] = { "PARTLABEL", 0.1, 0, N_("partition LABEL") },
+       [COL_PARTN] = { "PARTN", 2, SCOLS_FL_RIGHT, N_("partition number as read from the partition table"), COLTYPE_NUM },
        [COL_PARTTYPENAME]  = { "PARTTYPENAME",  0.1,  0, N_("partition type name") },
        [COL_PARTTYPE] = { "PARTTYPE", 36,  0, N_("partition type code or UUID") },
        [COL_PARTUUID] = { "PARTUUID", 36,  0, N_("partition UUID") },
@@ -949,6 +951,11 @@ static char *device_get_data(
                if (prop && prop->partflags)
                        str = xstrdup(prop->partflags);
                break;
+       case COL_PARTN:
+               prop = lsblk_device_get_properties(dev);
+               if (prop && prop->partn)
+                       str = xstrdup(prop->partn);
+               break;
        case COL_WWN:
                prop = lsblk_device_get_properties(dev);
                if (prop && prop->wwn)
index 31c9ecad5d44183a71f575a7029e35fce8b88988..c00723f1aecf47de555aa0747d70d4bd352ed48a 100644 (file)
@@ -74,6 +74,7 @@ struct lsblk_devprop {
        char *partuuid;         /* partition UUID */
        char *partlabel;        /* partition label */
        char *partflags;        /* partition flags */
+       char *partn;            /* partition number */
        char *wwn;              /* storage WWN */
        char *serial;           /* disk serial number */
        char *model;            /* disk model */