aboutsummaryrefslogtreecommitdiffstats
path: root/misc-utils/lsblk.c
diff options
context:
space:
mode:
authorKarel Zak <kzak@redhat.com>2023-09-26 14:45:13 +0200
committerKarel Zak <kzak@redhat.com>2023-11-20 22:25:46 +0100
commit30edd8e1eb20fa8a2e16e371ad48ed866b0e5458 (patch)
tree99ca44f7d0811fa50708b0ef0ffcee8edc5304e1 /misc-utils/lsblk.c
parent8aeb57b1d85be29a0ae00870cab6074526d8d83f (diff)
downloadutil-linux-30edd8e1eb20fa8a2e16e371ad48ed866b0e5458.tar.gz
lsblk: support normalized column names on command line
For example column name "LOG-SEC" is possible to use as LOG_SEC in some output formats and in filter expressions. Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/lsblk.c')
-rw-r--r--misc-utils/lsblk.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
index 7d207b5de1..47b73fee2c 100644
--- a/misc-utils/lsblk.c
+++ b/misc-utils/lsblk.c
@@ -345,12 +345,30 @@ static int column_name_to_id(const char *name, size_t namesz)
{
size_t i;
+ /* name as diplayed for users */
for (i = 0; i < ARRAY_SIZE(infos); i++) {
const char *cn = infos[i].name;
if (!strncasecmp(name, cn, namesz) && !*(cn + namesz))
return i;
}
+
+ /* name as used in expressions, JSON output etc. */
+ if (strnchr(name, namesz, '_')) {
+ char *buf = NULL;
+ size_t bufsz = 0;
+
+ for (i = 0; i < ARRAY_SIZE(infos); i++) {
+ if (scols_shellvar_name(infos[i].name, &buf, &bufsz) != 0)
+ continue;
+ if (!strncasecmp(name, buf, namesz) && !*(buf + namesz)) {
+ free(buf);
+ return i;
+ }
+ }
+ free(buf);
+ }
+
warnx(_("unknown column: %s"), name);
return -1;
}