]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util: introduce format_bytes_full()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 17 Jun 2019 07:08:24 +0000 (16:08 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 19 Jun 2019 14:15:19 +0000 (23:15 +0900)
And move it into format-util.c.

src/basic/format-util.c
src/basic/format-util.h
src/basic/parse-util.c
src/basic/parse-util.h
src/import/import-fs.c
src/import/pull-job.c
src/journal/journal-file.c
src/journal/journal-vacuum.c
src/journal/journalctl.c
src/test/test-btrfs.c
src/test/test-procfs-util.c

index 39ef2fceefb7826584e0cebf8f6cc71c76c53141..66551f752665a307d1f61dbfb0a93dcda0cda9d0 100644 (file)
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 
+#include <stdio.h>
+
 #include "format-util.h"
 #include "memory-util.h"
 
@@ -8,3 +10,58 @@ char *format_ifname(int ifindex, char buf[static IF_NAMESIZE + 1]) {
         memzero(buf, IF_NAMESIZE + 1);
         return if_indextoname(ifindex, buf);
 }
+
+char *format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag) {
+        typedef struct {
+                const char *suffix;
+                uint64_t factor;
+        } suffix_table;
+        static const suffix_table table_iec[] = {
+                { "E", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
+                { "P", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
+                { "T", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
+                { "G", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
+                { "M", UINT64_C(1024)*UINT64_C(1024) },
+                { "K", UINT64_C(1024) },
+        }, table_non_iec[] = {
+                { "E", UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000) },
+                { "P", UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000) },
+                { "T", UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000) },
+                { "G", UINT64_C(1000)*UINT64_C(1000)*UINT64_C(1000) },
+                { "M", UINT64_C(1000)*UINT64_C(1000) },
+                { "K", UINT64_C(1000) },
+        };
+        const suffix_table *table;
+        size_t i;
+
+        assert_cc(ELEMENTSOF(table_iec) == ELEMENTSOF(table_non_iec));
+
+        if (t == (uint64_t) -1)
+                return NULL;
+
+        table = flag & FORMAT_BYTES_USE_IEC ? table_iec : table_non_iec;
+
+        for (i = 0; i < ELEMENTSOF(table_iec); i++)
+                if (t >= table[i].factor) {
+                        if (flag & FORMAT_BYTES_BELOW_POINT)
+                                snprintf(buf, l,
+                                         "%" PRIu64 ".%" PRIu64 "%s",
+                                         t / table[i].factor,
+                                         ((t*UINT64_C(10)) / table[i].factor) % UINT64_C(10),
+                                         table[i].suffix);
+                        else
+                                snprintf(buf, l,
+                                         "%" PRIu64 "%s",
+                                         t / table[i].factor,
+                                         table[i].suffix);
+
+                        goto finish;
+                }
+
+        snprintf(buf, l, "%" PRIu64 "%s", t, flag & FORMAT_BYTES_TRAILING_B ? "B" : "");
+
+finish:
+        buf[l-1] = 0;
+        return buf;
+
+}
index 9925a5e9918dff24e5daa7573fe399f9c772ef30..e0d184a541968f57af54ee9cb462f84fb5c217b8 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <inttypes.h>
 #include <net/if.h>
+#include <stdbool.h>
 
 #if SIZEOF_PID_T == 4
 #  define PID_PRI PRIi32
 #endif
 
 char *format_ifname(int ifindex, char buf[static IF_NAMESIZE + 1]);
+
+typedef enum {
+        FORMAT_BYTES_USE_IEC     = 1 << 0,
+        FORMAT_BYTES_BELOW_POINT = 1 << 1,
+        FORMAT_BYTES_TRAILING_B  = 1 << 2,
+} FormatBytesFlag;
+
+#define FORMAT_BYTES_MAX 8
+char *format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag);
+static inline char *format_bytes(char *buf, size_t l, uint64_t t) {
+        return format_bytes_full(buf, l, t, FORMAT_BYTES_USE_IEC | FORMAT_BYTES_BELOW_POINT | FORMAT_BYTES_TRAILING_B);
+}
index 7774e794d43af05e1bee0466a0c79c96887583f1..115a1494a26596d068f27a4f20e1fde389e10854 100644 (file)
@@ -362,47 +362,6 @@ int parse_syscall_and_errno(const char *in, char **name, int *error) {
         return 0;
 }
 
-char *format_bytes(char *buf, size_t l, uint64_t t) {
-        unsigned i;
-
-        /* This only does IEC units so far */
-
-        static const struct {
-                const char *suffix;
-                uint64_t factor;
-        } table[] = {
-                { "E", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
-                { "P", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
-                { "T", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
-                { "G", UINT64_C(1024)*UINT64_C(1024)*UINT64_C(1024) },
-                { "M", UINT64_C(1024)*UINT64_C(1024) },
-                { "K", UINT64_C(1024) },
-        };
-
-        if (t == (uint64_t) -1)
-                return NULL;
-
-        for (i = 0; i < ELEMENTSOF(table); i++) {
-
-                if (t >= table[i].factor) {
-                        snprintf(buf, l,
-                                 "%" PRIu64 ".%" PRIu64 "%s",
-                                 t / table[i].factor,
-                                 ((t*UINT64_C(10)) / table[i].factor) % UINT64_C(10),
-                                 table[i].suffix);
-
-                        goto finish;
-                }
-        }
-
-        snprintf(buf, l, "%" PRIu64 "B", t);
-
-finish:
-        buf[l-1] = 0;
-        return buf;
-
-}
-
 int safe_atou_full(const char *s, unsigned base, unsigned *ret_u) {
         char *x = NULL;
         unsigned long l;
index 5a05dfeac550d3d317656c817dc67bf0ef3197d7..3a70b792766fb10740036be3586795148eb3de49 100644 (file)
@@ -22,9 +22,6 @@ int parse_range(const char *t, unsigned *lower, unsigned *upper);
 int parse_errno(const char *t);
 int parse_syscall_and_errno(const char *in, char **name, int *error);
 
-#define FORMAT_BYTES_MAX 8
-char *format_bytes(char *buf, size_t l, uint64_t t);
-
 int safe_atou_full(const char *s, unsigned base, unsigned *ret_u);
 
 static inline int safe_atou(const char *s, unsigned *ret_u) {
index 04344492c86368f2dfb79b68c5983026a26c3cc1..abb4efac9991c3d8f3512092a41b842a2c8576b7 100644 (file)
@@ -6,13 +6,13 @@
 #include "alloc-util.h"
 #include "btrfs-util.h"
 #include "fd-util.h"
+#include "format-util.h"
 #include "fs-util.h"
 #include "hostname-util.h"
 #include "import-common.h"
 #include "import-util.h"
 #include "machine-image.h"
 #include "mkdir.h"
-#include "parse-util.h"
 #include "ratelimit.h"
 #include "rm-rf.h"
 #include "string-util.h"
index 9f759a77e096c92de62ca8531dbe5e59b3add12c..881bba0eebc5b1ac6b2d036aa13e979caf089459 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "alloc-util.h"
 #include "fd-util.h"
+#include "format-util.h"
 #include "gcrypt-util.h"
 #include "hexdecoct.h"
 #include "import-util.h"
index c2dcf76deb86dd177594b1bbe9cccb3bc41e9fb2..91ca53e5ebedbb1d4746455ac2c2e102068ca9f5 100644 (file)
 #include "chattr-util.h"
 #include "compress.h"
 #include "fd-util.h"
+#include "format-util.h"
 #include "fs-util.h"
 #include "journal-authenticate.h"
 #include "journal-def.h"
 #include "journal-file.h"
 #include "lookup3.h"
 #include "memory-util.h"
-#include "parse-util.h"
 #include "path-util.h"
 #include "random-util.h"
 #include "set.h"
index a932314e19e61c984356db64ebf9c736ae904730..87d65896c61e7001f6af1fb177b47645c14fa882 100644 (file)
@@ -9,11 +9,11 @@
 #include "alloc-util.h"
 #include "dirent-util.h"
 #include "fd-util.h"
+#include "format-util.h"
 #include "fs-util.h"
 #include "journal-def.h"
 #include "journal-file.h"
 #include "journal-vacuum.h"
-#include "parse-util.h"
 #include "sort-util.h"
 #include "string-util.h"
 #include "time-util.h"
index 3d053c59f008520264bb50c231cb276ca49c2c5c..a3eb61e0f12d3b6d5dd8a7e3fe5103c5518467a8 100644 (file)
@@ -35,6 +35,7 @@
 #include "device-private.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "format-util.h"
 #include "fs-util.h"
 #include "fsprg.h"
 #include "glob-util.h"
index 5e5638cd72d726bdee3a82dbf1dd5d45b8e487bb..5bd0e3458c45eee29d1b037837807f8300c7aab7 100644 (file)
@@ -5,8 +5,8 @@
 #include "btrfs-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "format-util.h"
 #include "log.h"
-#include "parse-util.h"
 #include "string-util.h"
 #include "util.h"
 
index 1d0612985bf9f4c480e8c754cdf8437969a79de4..662688e0f0d18c9f42b27dc514154c887c714fc2 100644 (file)
@@ -2,8 +2,8 @@
 
 #include <errno.h>
 
+#include "format-util.h"
 #include "log.h"
-#include "parse-util.h"
 #include "procfs-util.h"
 
 int main(int argc, char *argv[]) {