From 48c172ba589cfd848624b51f6f748b56bc217775 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Tue, 6 May 2014 06:31:28 -0500 Subject: Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c. --- lib/lib.c | 23 +++++++++++++++++++++++ lib/lib.h | 1 + lib/pending.c | 16 ---------------- lib/pending.h | 1 - 4 files changed, 24 insertions(+), 17 deletions(-) (limited to 'lib') diff --git a/lib/lib.c b/lib/lib.c index 670f6a71..1ab80351 100644 --- a/lib/lib.c +++ b/lib/lib.c @@ -783,3 +783,26 @@ void names_to_pid(char **names, int (*callback)(pid_t pid, char *name)) } closedir(dp); } + +// display first few digits of number with power of two units, except we're +// actually just counting decimal digits and showing mil/bil/trillions. +int human_readable(char *buf, unsigned long long num) +{ + int end, len; + + len = sprintf(buf, "%lld", num); + end = ((len-1)%3)+1; + len /= 3; + + if (len && end == 1) { + buf[2] = buf[1]; + buf[1] = '.'; + end = 3; + } + buf[end++] = ' '; + if (len) buf[end++] = " KMGTPE"[len]; + buf[end++] = 'B'; + buf[end++] = 0; + + return end; +} diff --git a/lib/lib.h b/lib/lib.h index d5b3d3ce..715e78d9 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -153,6 +153,7 @@ void replace_tempfile(int fdin, int fdout, char **tempname); void crc_init(unsigned int *crc_table, int little_endian); int terminal_size(unsigned *x, unsigned *y); int yesno(char *prompt, int def); +int human_readable(char *buf, unsigned long long num); // net.c int xsocket(int domain, int type, int protocol); diff --git a/lib/pending.c b/lib/pending.c index 741c5cc1..639c82f5 100644 --- a/lib/pending.c +++ b/lib/pending.c @@ -20,19 +20,3 @@ void daemonize(void) dup2(fd, 2); if (fd > 2) close(fd); } - -char *human_readable(unsigned long long size) -{ - static char buf[32]; - char *tmp = (buf+4); //unsigned long long can come in 20byte string. - int index, sz; - - for (index = 0; 1024 < size>>(10*index); index++); - sz = size>>(10*index); - if (sz < 10 && index) { - sprintf(tmp, "%llu", size>>(10*(index-1))); - sprintf(buf, "%c.%c", tmp[0], tmp[1]); - } else sprintf(buf, "%u", sz); - sprintf(buf, "%s%c", buf, " KMGTPE"[index]); - return buf; -} diff --git a/lib/pending.h b/lib/pending.h index 5e3b309f..aa31ea9e 100644 --- a/lib/pending.h +++ b/lib/pending.h @@ -11,4 +11,3 @@ int update_password(char *filename, char* username, char* encrypted); // cut helper functions void daemonize(void); -char *human_readable(unsigned long long size); -- cgit v1.2.3