mirror of
https://github.com/jarun/nnn.git
synced 2024-11-24 11:51:27 +00:00
Integer-only coolsize() (#84)
This commit is contained in:
parent
1ad5a7bd7d
commit
7be0726164
20
nnn.c
20
nnn.c
|
@ -80,6 +80,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include <ftw.h>
|
#include <ftw.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "nnn.h"
|
#include "nnn.h"
|
||||||
|
|
||||||
|
@ -1439,10 +1440,8 @@ coolsize(off_t size)
|
||||||
{
|
{
|
||||||
static const char * const U = "BKMGTPEZY";
|
static const char * const U = "BKMGTPEZY";
|
||||||
static char size_buf[12]; /* Buffer to hold human readable size */
|
static char size_buf[12]; /* Buffer to hold human readable size */
|
||||||
static int i;
|
static int rem, i;
|
||||||
|
static int fdig; /* number of fractional digits to show */
|
||||||
static long double rem;
|
|
||||||
static const double div_2_pow_10 = 1.0 / 1024.0;
|
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
rem = 0;
|
rem = 0;
|
||||||
|
@ -1453,7 +1452,18 @@ coolsize(off_t size)
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(size_buf, 12, "%.*Lf%c", i, size + rem * div_2_pow_10, U[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]);
|
||||||
|
|
||||||
return size_buf;
|
return size_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue