]> Sergey Matveev's repositories - nnn.git/commitdiff
Revert "Integer-only coolsize() (#84)"
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 4 Mar 2018 19:42:10 +0000 (01:12 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 4 Mar 2018 19:42:10 +0000 (01:12 +0530)
This reverts commit 7be0726164442a83f47e5a9a0cdf2db343832d23.

nnn.c

diff --git a/nnn.c b/nnn.c
index 0c4c695e1755a72240acf50de95c46bb34922d33..556857448c02a26807b37d55366a9f5b74c31796 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -80,7 +80,6 @@
 #endif
 #include <ftw.h>
 #include <wchar.h>
-#include <inttypes.h>
 
 #include "nnn.h"
 
@@ -1440,8 +1439,10 @@ coolsize(off_t size)
 {
        static const char * const U = "BKMGTPEZY";
        static char size_buf[12]; /* Buffer to hold human readable size */
-       static int rem, i;
-       static int fdig; /* number of fractional digits to show */
+       static int i;
+
+       static long double rem;
+       static const double div_2_pow_10 = 1.0 / 1024.0;
 
        i = 0;
        rem = 0;
@@ -1452,18 +1453,7 @@ coolsize(off_t size)
                ++i;
        }
 
-       rem = (1000 * rem) >> 10; /* convert 1024th fractions to 1000th */
-       fdig = 3;
-
-       /* Show 1 decimal for KB sizes and 2 decimals for MBs. */
-       if (i < 3) { --fdig; rem = (rem + 5) / 10; }
-       if (i < 2) { --fdig; rem = (rem + 5) / 10; }
-
-       if (i > 0)
-               snprintf(size_buf, 12, "%" PRId64 ".%0*i%c", size, fdig, rem, U[i]);
-       else
-               snprintf(size_buf, 12, "%" PRId64 "%c", size, U[i]);
-
+       snprintf(size_buf, 12, "%.*Lf%c", i, size + rem * div_2_pow_10, U[i]);
        return size_buf;
 }