Fixes to output of ls -lh for certain file sizes:

1. Sizes in the range 1000 -- 1023 units require four characters width
   for the integer; increase the field width to accomodate this.
2. Sizes in the range 9.95 -- 10 units were being displayed as "10.0"
   units; adjust the logic to fix this, and now that we've got an extra
   character of field width, print fractional units if the size is less
   than 99.95 units.
3. Don't display sub-byte precision.

This should mean that the following sizes are displayed:
    0B .. 1023B
  1.0U ..  9.9U
 10.0U .. 99.9U
  100U .. 1023U
for values of U in "KMGTPE".

PR:		bin/63547
Pointy hat to:	cperciva
Approved by:	rwatson (mentor)
This commit is contained in:
Colin Percival 2004-03-01 19:25:27 +00:00
parent ea753400f0
commit 310924af3d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=126458

View File

@ -623,11 +623,11 @@ printsize(size_t width, off_t bytes)
dbytes = bytes;
unit = unit_adjust(&dbytes);
if (dbytes == 0)
(void)printf("%*s ", 4, "0B");
if (unit == 0)
(void)printf("%*d%c ", 4, (int)bytes, 'B');
else
(void)printf("%*.*f%c ", 3,
dbytes > 10 ? 0 : 1, dbytes, "BKMGTPE"[unit]);
(void)printf("%*.*f%c ", 4,
dbytes >= 99.95 ? 0 : 1, dbytes, "BKMGTPE"[unit]);
} else
(void)printf("%*jd ", (u_int)width, bytes);
}