"staywithu" writes:
In BusyBox v1.00-pre2,
commands like ls, df with -h option report a wrong file size for files larger than 4GBtye!!
For example,
when I execute 'ls -l', it reports
-rw-r--r-- 1 root root 5368709120 Aug 17 2003 large_stream.tp
when I execute 'ls -lh', I expect that
-rw-r--r-- 1 root root 5.0G Aug 17 2003 large_stream.tp
but it reports
-rw-r--r-- 1 root root 1.0G Aug 17 2003 large_stream.tp
I fixed this bug that...
Line 31 in libbb/human_readable.c and line 275 include/libbb.h
const char *make_human_readable_str(unsigned long size
=> const char *make_human_readable_str(unsigned long long size
It's OK!
diff --git a/libbb/human_readable.c b/libbb/human_readable.c
index 7bdad36..6568891 100644
--- a/libbb/human_readable.c
+++ b/libbb/human_readable.c
@@ -28,9 +28,8 @@
#include <stdio.h>
#include "libbb.h"
-const char *make_human_readable_str(unsigned long size,
- unsigned long block_size,
- unsigned long display_unit)
+const char *make_human_readable_str(unsigned long long size,
+ unsigned long block_size, unsigned long display_unit)
{
/* The code will adjust for additional (appended) units. */
static const char zero_and_units[] = { '0', 0, 'k', 'M', 'G', 'T' };
@@ -48,7 +47,7 @@
f = fmt;
frac = 0;
- val = ((unsigned long long) size) * block_size;
+ val = size * block_size;
if (val == 0) {
return u;
}