diff options
author | Elliott Hughes <enh@google.com> | 2015-08-08 21:10:44 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2015-08-08 21:10:44 -0500 |
commit | 0fb465194789965b6fb2efd31995a2441144d650 (patch) | |
tree | c55819bbb0f6ea3a575d8adb05ad03e16ca34ae7 | |
parent | 11d2ff5ffac9382be0d6971b8ac84df21eca85df (diff) | |
download | toybox-0fb465194789965b6fb2efd31995a2441144d650.tar.gz |
Different tools have different ideas about what human-readable output
looks like. dd uses "7 MB" where du uses "7M", for example. this patch
adds flags, similar to the BSD humanize_number. most callers will pass 0.
-rw-r--r-- | lib/lib.c | 6 | ||||
-rw-r--r-- | lib/lib.h | 4 | ||||
-rw-r--r-- | toys/pending/dd.c | 4 | ||||
-rw-r--r-- | toys/posix/du.c | 2 |
4 files changed, 9 insertions, 7 deletions
@@ -868,7 +868,7 @@ void names_to_pid(char **names, int (*callback)(pid_t pid, char *name)) // 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 human_readable(char *buf, unsigned long long num, int style) { int end, len; @@ -881,9 +881,9 @@ int human_readable(char *buf, unsigned long long num) buf[1] = '.'; end = 3; } - buf[end++] = ' '; + if (style & HR_SPACE) buf[end++] = ' '; if (len) buf[end++] = " KMGTPE"[len]; - buf[end++] = 'B'; + if (style & HR_B) buf[end++] = 'B'; buf[end++] = 0; return end; @@ -177,7 +177,9 @@ void replace_tempfile(int fdin, int fdout, char **tempname); void crc_init(unsigned int *crc_table, int little_endian); void base64_init(char *p); int yesno(char *prompt, int def); -int human_readable(char *buf, unsigned long long num); +#define HR_SPACE 1 +#define HR_B 2 +int human_readable(char *buf, unsigned long long num, int style); int qstrcmp(const void *a, const void *b); int xpoll(struct pollfd *fds, int nfds, int timeout); diff --git a/toys/pending/dd.c b/toys/pending/dd.c index 34491048..366d3c54 100644 --- a/toys/pending/dd.c +++ b/toys/pending/dd.c @@ -133,9 +133,9 @@ static void summary() //out to STDERR fprintf(stderr,"%llu+%llu records in\n%llu+%llu records out\n", st.in_full, st.in_part, st.out_full, st.out_part); - human_readable(toybuf, st.bytes); + human_readable(toybuf, st.bytes, HR_SPACE|HR_B); fprintf(stderr, "%llu bytes (%s) copied, ",st.bytes, toybuf); - human_readable(toybuf, st.bytes/seconds); + human_readable(toybuf, st.bytes/seconds, HR_SPACE|HR_B); fprintf(stderr, "%f s, %s/s\n", seconds, toybuf); } diff --git a/toys/posix/du.c b/toys/posix/du.c index 43029973..77c7b6e2 100644 --- a/toys/posix/du.c +++ b/toys/posix/du.c @@ -57,7 +57,7 @@ static void print(long long size, struct dirtree *node) if (TT.maxdepth && TT.depth > TT.maxdepth) return; if (toys.optflags & FLAG_h) { - human_readable(toybuf, size); + human_readable(toybuf, size, 0); printf("%s", toybuf); } else { int bits = 10; |