commit 4d4e2608c12962620cfc175528085b4f853a32a6
parent 2cf82f4c16c0dde6643e8482ed5d5409845016a7
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 19 Oct 2014 09:48:04 +0000
ls: add -h flag
for util/human don't show "B" for bytes.
Diffstat:
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/ls.1 b/ls.1
@@ -20,6 +20,9 @@ lists directories themselves, not their contents.
.B \-F
append a file type indicator to files.
.TP
+.B \-h
+show filesizes in human\-readable format.
+.TP
.B \-i
print the index number of each file.
.TP
diff --git a/ls.c b/ls.c
@@ -32,6 +32,7 @@ static void output(Entry *);
static bool aflag = false;
static bool dflag = false;
static bool Fflag = false;
+static bool hflag = false;
static bool iflag = false;
static bool lflag = false;
static bool rflag = false;
@@ -43,7 +44,7 @@ static bool many;
static void
usage(void)
{
- eprintf("usage: %s [-1adFilrtU] [FILE...]\n", argv0);
+ eprintf("usage: %s [-1adFhilrtU] [FILE...]\n", argv0);
}
int
@@ -65,6 +66,9 @@ main(int argc, char *argv[])
case 'F':
Fflag = true;
break;
+ case 'h':
+ hflag = true;
+ break;
case 'i':
iflag = true;
break;
@@ -282,8 +286,12 @@ output(Entry *ent)
fmt = "%b %d %H:%M";
strftime(buf, sizeof buf, fmt, localtime(&ent->mtime));
- printf("%s %4ld %-8.8s %-8.8s %10lu %s %s%s", mode, (long)ent->nlink, pwname,
- grname, (unsigned long)ent->size, buf, ent->name, indicator(ent->mode));
+ printf("%s %4ld %-8.8s %-8.8s ", mode, (long)ent->nlink, pwname, grname);
+ if(hflag)
+ printf("%10s ", humansize((unsigned long)ent->size));
+ else
+ printf("%10lu ", (unsigned long)ent->size);
+ printf("%s %s%s", buf, ent->name, indicator(ent->mode));
if(S_ISLNK(ent->mode)) {
if((len = readlink(ent->name, buf, sizeof buf)) == -1)
eprintf("readlink %s:", ent->name);
diff --git a/util/human.c b/util/human.c
@@ -7,14 +7,14 @@ char *
humansize(double n)
{
static char buf[16];
- const char postfixes[] = " KMGTPE";
+ const char postfixes[] = "BKMGTPE";
size_t i;
for(i = 0; n >= 1024 && i < strlen(postfixes); i++)
n /= 1024;
if(!i)
- snprintf(buf, sizeof(buf), "%lu%c", (unsigned long)n, postfixes[i]);
+ snprintf(buf, sizeof(buf), "%lu", (unsigned long)n);
else
snprintf(buf, sizeof(buf), "%.1f%c", n, postfixes[i]);
return buf;