diff options
| author | Karel Zak <kzak@redhat.com> | 2019-10-15 13:08:09 +0200 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2019-10-15 13:08:09 +0200 |
| commit | 6f74ede50aaa6a7471e5a123cacbaaf147e0578c (patch) | |
| tree | 2f891a51116578f3dadcad465c44cbd8a484b4c8 /misc-utils/lsblk.c | |
| parent | 7408a5d9c2e0bb20ac0660ead16b787825ef240e (diff) | |
| download | util-linux-6f74ede50aaa6a7471e5a123cacbaaf147e0578c.tar.gz | |
lsblk: read also GROUP,OWNER and MODE from dumps
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/lsblk.c')
| -rw-r--r-- | misc-utils/lsblk.c | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index 7ab9dc23c2..1693b9af73 100644 --- a/misc-utils/lsblk.c +++ b/misc-utils/lsblk.c @@ -711,7 +711,7 @@ static char *device_get_data( int id, /* column ID (COL_*) */ uint64_t *sortdata) /* returns sort data as number */ { - struct lsblk_devprop *prop; + struct lsblk_devprop *prop = NULL; char *str = NULL; switch(id) { @@ -730,30 +730,42 @@ static char *device_get_data( str = xstrdup(dev->filename); break; case COL_OWNER: - { - struct stat *st = device_get_stat(dev); - struct passwd *pw = st ? getpwuid(st->st_uid) : NULL; - if (pw) - str = xstrdup(pw->pw_name); + if (lsblk->sysroot) + prop = lsblk_device_get_properties(dev); + if (prop && prop->owner) { + str = xstrdup(prop->owner); + } else { + struct stat *st = device_get_stat(dev); + struct passwd *pw = st ? getpwuid(st->st_uid) : NULL; + if (pw) + str = xstrdup(pw->pw_name); + } break; - } case COL_GROUP: - { - struct stat *st = device_get_stat(dev); - struct group *gr = st ? getgrgid(st->st_gid) : NULL; - if (gr) - str = xstrdup(gr->gr_name); + if (lsblk->sysroot) + prop = lsblk_device_get_properties(dev); + if (prop && prop->group) { + str = xstrdup(prop->group); + } else { + struct stat *st = device_get_stat(dev); + struct group *gr = st ? getgrgid(st->st_gid) : NULL; + if (gr) + str = xstrdup(gr->gr_name); + } break; - } case COL_MODE: - { - struct stat *st = device_get_stat(dev); - char md[11] = { '\0' }; + if (lsblk->sysroot) + prop = lsblk_device_get_properties(dev); + if (prop && prop->mode) { + str = xstrdup(prop->mode); + } else { + struct stat *st = device_get_stat(dev); + char md[11] = { '\0' }; - if (st) - str = xstrdup(xstrmode(st->st_mode, md)); + if (st) + str = xstrdup(xstrmode(st->st_mode, md)); + } break; - } case COL_MAJMIN: if (is_parsable(lsblk)) xasprintf(&str, "%u:%u", dev->maj, dev->min); |
