"staywithu" writes:
authorEric Andersen <andersen@codepoet.org>
Fri, 22 Aug 2003 23:08:37 +0000 (23:08 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 22 Aug 2003 23:08:37 +0000 (23:08 -0000)
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!

include/libbb.h
libbb/human_readable.c

index 750e0bb4ff1d69391143346b72bbab9b6e185269..a6d9a510b2b5b92b61e7c438521d0dd8cf841de6 100644 (file)
@@ -267,7 +267,8 @@ enum {
        MEGABYTE = (KILOBYTE*1024),
        GIGABYTE = (MEGABYTE*1024)
 };
-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);
 
 int bb_ask_confirmation(void);
 int klogctl(int type, char * b, int len);
index 7bdad36a9f3ffe2773a0858d2509ce730b7a35b9..656889150d7ac79a2df47c305eac2a557b770510 100644 (file)
@@ -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 @@ const char *make_human_readable_str(unsigned long size,
        f = fmt;
        frac = 0;
 
-       val = ((unsigned long long) size) * block_size;
+       val = size * block_size;
        if (val == 0) {
                return u;
        }