"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;
 	}