From ff8fda848284e82d97299806b31c196651b372a5 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 8 Jan 2022 22:59:49 +0100 Subject: [PATCH] ls: implement ls -sh (human-readable allocated blocks) function old new delta display_single 979 1018 +39 Signed-off-by: Denys Vlasenko --- coreutils/ls.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/coreutils/ls.c b/coreutils/ls.c index 48f5eb482..b69b80460 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -498,9 +498,16 @@ static NOINLINE unsigned display_single(const struct dnode *dn) if (opt & OPT_i) /* show inode# */ column += printf("%7llu ", (long long) dn->dn_ino); -//TODO: -h should affect -s too: - if (opt & OPT_s) /* show allocated blocks */ - column += printf("%6"OFF_FMT"u ", (off_t) (dn->dn_blocks >> 1)); + if (opt & OPT_s) { /* show allocated blocks */ + if (opt & OPT_h) { + column += printf("%"HUMAN_READABLE_MAX_WIDTH_STR"s ", + /* print size, show one fractional, use suffixes */ + make_human_readable_str((off_t)dn->dn_blocks << 9, 1, 0) + ); + } else { + column += printf("%6"OFF_FMT"u ", (off_t)(dn->dn_blocks >> 1)); + } + } if (opt & OPT_l) { /* long listing: show mode */ char modestr[12];