[prev in list] [next in list] [prev in thread] [next in thread]
List: freebsd-audit
Subject: ls -h precision
From: Dima Dorfman <dima () trit ! org>
Date: 2002-10-16 2:38:21
[Download RAW message or body]
When the -h option was added to ls(1), the unit_adjust() routine,
which was borrowed from du(1), was changed from taking a double to an
off_t. Is there a reason for this change that I'm missing? Changing
it back and making the appropriate changes to the caller greatly
improves the usefulness of -h. E.g., this file:
-rw-r--r-- 1 dima wheel 3070535680 Jan 25 2002 lambda-a.20001129
is reported like this with -h as it is right now:
-rw-r--r-- 1 dima wheel 2G Jan 25 2002 lambda-a.20001129
which is somewhat less than useful, since this file is much closer to
3G than 2G. With the attached patch, it is reported like this:
-rw-r--r-- 1 dima wheel 2.9G Jan 25 2002 lambda-a.20001129
Any reason this shouldn't be implemented? Other comments?
Thanks in advance,
Dima.
Index: print.c
===================================================================
RCS file: /ref/cvsf/src/bin/ls/print.c,v
retrieving revision 1.57
diff -u -r1.57 print.c
--- print.c 29 Aug 2002 14:29:09 -0000 1.57
+++ print.c 16 Oct 2002 02:37:09 -0000
@@ -93,7 +93,7 @@
typedef enum {
NONE, KILO, MEGA, GIGA, TERA, PETA, UNIT_MAX
} unit_t;
-static unit_t unit_adjust(off_t *);
+static unit_t unit_adjust(double *);
static int unitp[] = {NONE, KILO, MEGA, GIGA, TERA, PETA};
@@ -602,16 +602,18 @@
static void
printsize(size_t width, off_t bytes)
{
+ double dbytes;
unit_t unit;
if (f_humanval) {
- unit = unit_adjust(&bytes);
+ dbytes = bytes;
+ unit = unit_adjust(&dbytes);
- if (bytes == 0)
+ if (dbytes == 0)
(void)printf("%*s ", width, "0B");
else
- (void)printf("%*lld%c ", width - 1, bytes,
- "BKMGTPE"[unit]);
+ (void)printf("%*.*f%c ", width - 1, dbytes > 10 ? 0 : 1,
+ dbytes, "BKMGTPE"[unit]);
} else
(void)printf("%*lld ", width, bytes);
}
@@ -623,13 +625,13 @@
*
*/
unit_t
-unit_adjust(off_t *val)
+unit_adjust(double *val)
{
double abval;
unit_t unit;
unsigned int unit_sz;
- abval = fabs((double)*val);
+ abval = fabs(*val);
unit_sz = abval ? ilogb(abval) / 10 : 0;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic