diff options
author | Karel Zak | 2013-05-13 13:33:41 +0200 |
---|---|---|
committer | Karel Zak | 2013-05-13 13:33:41 +0200 |
commit | 460c7afb79075bd5b39e7d4bc153aa41c939bab3 (patch) | |
tree | f26b2b31ff2dc7c90b486894fbb40a83edd32fd3 /misc-utils | |
parent | tests: add losetup tests (diff) | |
download | kernel-qcow2-util-linux-460c7afb79075bd5b39e7d4bc153aa41c939bab3.tar.gz kernel-qcow2-util-linux-460c7afb79075bd5b39e7d4bc153aa41c939bab3.tar.xz kernel-qcow2-util-linux-460c7afb79075bd5b39e7d4bc153aa41c939bab3.zip |
lsblk: add SERIAL column
... to return short serial number of the disk (from udev db)
Addresses: https://github.com/karelzak/util-linux/issues/33
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils')
-rw-r--r-- | misc-utils/lsblk.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index 8845e2e43..494bc73a8 100644 --- a/misc-utils/lsblk.c +++ b/misc-utils/lsblk.c @@ -77,6 +77,7 @@ enum { COL_RO, COL_RM, COL_MODEL, + COL_SERIAL, COL_SIZE, COL_STATE, COL_OWNER, @@ -133,6 +134,7 @@ static struct colinfo infos[] = { [COL_ROTA] = { "ROTA", 1, TT_FL_RIGHT, N_("rotational device") }, [COL_RAND] = { "RAND", 1, TT_FL_RIGHT, N_("adds randomness") }, [COL_MODEL] = { "MODEL", 0.1, TT_FL_TRUNC, N_("device identifier") }, + [COL_SERIAL] = { "SERIAL", 0.1, TT_FL_TRUNC, N_("disk serial number") }, [COL_SIZE] = { "SIZE", 5, TT_FL_RIGHT, N_("size of the device") }, [COL_STATE] = { "STATE", 7, TT_FL_TRUNC, N_("state of the device") }, [COL_OWNER] = { "OWNER", 0.1, TT_FL_TRUNC, N_("user name"), }, @@ -209,6 +211,7 @@ struct blkdev_cxt { char *partuuid; /* partition UUID */ char *partlabel; /* partiton label */ char *wwn; /* storage WWN */ + char *serial; /* disk serial number */ int npartitions; /* # of partitions this device has */ int nholders; /* # of devices mapped directly to this device @@ -291,6 +294,7 @@ static void reset_blkdev_cxt(struct blkdev_cxt *cxt) free(cxt->partuuid); free(cxt->partlabel); free(cxt->wwn); + free(cxt->serial); sysfs_deinit(&cxt->sysfs); @@ -437,7 +441,8 @@ static int get_udev_properties(struct blkdev_cxt *cxt) cxt->partuuid = xstrdup(data); if ((data = udev_device_get_property_value(dev, "ID_WWN"))) cxt->wwn = xstrdup(data); - + if ((data = udev_device_get_property_value(dev, "ID_SERIAL_SHORT"))) + cxt->serial = xstrdup(data); udev_device_unref(dev); cxt->probed = 1; } @@ -793,6 +798,13 @@ static void set_tt_data(struct blkdev_cxt *cxt, int col, int id, struct tt_line tt_line_set_data(ln, col, p); } break; + case COL_SERIAL: + if (!cxt->partition && cxt->nslaves == 0) { + get_udev_properties(cxt); + if (cxt->serial) + tt_line_set_data(ln, col, xstrdup(cxt->serial)); + } + break; case COL_REV: if (!cxt->partition && cxt->nslaves == 0) { p = sysfs_strdup(&cxt->sysfs, "device/rev"); |