]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Add utility function format_parsable_size_with_suffix
authorJoel Rosdahl <joel@rosdahl.net>
Mon, 18 Jul 2011 10:22:08 +0000 (12:22 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Wed, 20 Jul 2011 21:31:37 +0000 (23:31 +0200)
ccache.h
test/test_util.c
util.c

index d0f083387b6d359f4d73e3b3d59abe5bf22ba050..3d72b38a97c6d05a7139227b0bc1e858c6b1f858 100644 (file)
--- a/ccache.h
+++ b/ccache.h
@@ -128,7 +128,8 @@ const char *get_extension(const char *path);
 char *remove_extension(const char *path);
 size_t file_size(struct stat *st);
 int safe_create_wronly(const char *fname);
-char *format_human_readable_size(size_t v);
+char *format_human_readable_size(size_t size);
+char *format_parsable_size_with_suffix(size_t size);
 bool parse_size_with_suffix(const char *str, size_t *size);
 char *x_realpath(const char *path);
 char *gnu_getcwd(void);
index 3a73bf87659f04e47b97a6a499ea336ff34d533c..3e1c86af30266098de03b8826b034a9016c86bf6 100644 (file)
@@ -106,4 +106,18 @@ TEST(format_human_readable_size)
                           format_human_readable_size(17.11 * 1024 * 1024));
 }
 
+TEST(format_parsable_size_with_suffix)
+{
+       CHECK_STR_EQ_FREE2("0", format_parsable_size_with_suffix(0));
+       CHECK_STR_EQ_FREE2("42K", format_parsable_size_with_suffix(42));
+       CHECK_STR_EQ_FREE2("1.0M", format_parsable_size_with_suffix(1024));
+       CHECK_STR_EQ_FREE2("1.2M", format_parsable_size_with_suffix(1234));
+       CHECK_STR_EQ_FREE2("438.5M",
+                          format_parsable_size_with_suffix(438.5 * 1024));
+       CHECK_STR_EQ_FREE2("1.0G",
+                          format_parsable_size_with_suffix(1024 * 1024));
+       CHECK_STR_EQ_FREE2("17.1G",
+                          format_parsable_size_with_suffix(17.11 * 1024 * 1024));
+}
+
 TEST_SUITE_END
diff --git a/util.c b/util.c
index 313bd6ac1377ee85e01f495aac33613419525353..e91e861244e7e7fac7ecbb72d480ad85272976f7 100644 (file)
--- a/util.c
+++ b/util.c
@@ -830,6 +830,23 @@ format_human_readable_size(size_t v)
        return s;
 }
 
+/* Format a size (in KiB) as a human-readable string. Caller frees. */
+char *
+format_parsable_size_with_suffix(size_t size)
+{
+       char *s;
+       if (size >= 1024*1024) {
+               s = format("%.1fG", size / ((double)(1024*1024)));
+       } else if (size >= 1024) {
+               s = format("%.1fM", size / ((double)(1024)));
+       } else if (size > 0) {
+               s = format("%.0fK", (double)size);
+       } else {
+               s = x_strdup("0");
+       }
+       return s;
+}
+
 /*
  * Parse a value in multiples of 1024 given a string that can end in K, M or G.
  * Default suffix: G.