Eric Blake
2023-Oct-06  15:18 UTC
[Libguestfs] [libnbd PATCH 2/2] info: Show human sizes for block_size values
Adding a human-readable size for block constraints is useful.  For:
$ ./run nbdinfo -- [ nbdkit memory \
   --filter=blocksize-policy blocksize-preferred=32k 1M ] | grep pref
this changes pre-patch:
	block_size_preferred: 32768
to post-patch:
	block_size_preferred: 32768 (32K)
Signed-off-by: Eric Blake <eblake at redhat.com>
---
 info/show.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/info/show.c b/info/show.c
index 6aeffb54..ac483f34 100644
--- a/info/show.c
+++ b/info/show.c
@@ -35,6 +35,7 @@
 #include "nbdinfo.h"
 static void show_boolean (const char *name, bool cond);
+static void show_size (const char *name, int64_t size);
 static int collect_context (void *opaque, const char *name);
 static char *get_content (struct nbd_handle *, int64_t size);
@@ -181,13 +182,9 @@ show_one_export (struct nbd_handle *nbd, const char *desc,
       show_boolean ("can_trim", can_trim);
     if (can_zero >= 0)
       show_boolean ("can_zero", can_zero);
-    if (block_minimum > 0)
-      fprintf (fp, "\t%s: %" PRId64 "\n",
"block_size_minimum", block_minimum);
-    if (block_preferred > 0)
-      fprintf (fp, "\t%s: %" PRId64 "\n",
"block_size_preferred",
-               block_preferred);
-    if (block_maximum > 0)
-      fprintf (fp, "\t%s: %" PRId64 "\n",
"block_size_maximum", block_maximum);
+    show_size ("block_size_minimum", block_minimum);
+    show_size ("block_size_preferred", block_preferred);
+    show_size ("block_size_maximum", block_maximum);
   }
   else {
     if (first)
@@ -304,6 +301,21 @@ show_boolean (const char *name, bool cond)
   ansi_restore (fp);
 }
+/* Used for displaying sizes in non-JSON output. */
+void show_size (const char *name, int64_t size)
+{
+  char size_str[HUMAN_SIZE_LONGEST];
+  bool human_size_flag = false;
+
+  if (size > 0) {
+    human_size (size_str, size, &human_size_flag);
+    if (human_size_flag)
+      fprintf (fp, "\t%s: %" PRId64 " (%s)\n", name, size,
size_str);
+    else
+      fprintf (fp, "\t%s: %" PRId64 "\n", name, size);
+  }
+}
+
 static int
 collect_context (void *opaque, const char *name)
 {
-- 
2.41.0
Richard W.M. Jones
2023-Oct-07  09:27 UTC
[Libguestfs] [libnbd PATCH 2/2] info: Show human sizes for block_size values
On Fri, Oct 06, 2023 at 10:18:09AM -0500, Eric Blake wrote:> Adding a human-readable size for block constraints is useful. For: > > $ ./run nbdinfo -- [ nbdkit memory \ > --filter=blocksize-policy blocksize-preferred=32k 1M ] | grep pref > > this changes pre-patch: > block_size_preferred: 32768 > to post-patch: > block_size_preferred: 32768 (32K)I think info/nbdinfo.pod needs to be updated. Rich.> Signed-off-by: Eric Blake <eblake at redhat.com> > --- > info/show.c | 26 +++++++++++++++++++------- > 1 file changed, 19 insertions(+), 7 deletions(-) > > diff --git a/info/show.c b/info/show.c > index 6aeffb54..ac483f34 100644 > --- a/info/show.c > +++ b/info/show.c > @@ -35,6 +35,7 @@ > #include "nbdinfo.h" > > static void show_boolean (const char *name, bool cond); > +static void show_size (const char *name, int64_t size); > static int collect_context (void *opaque, const char *name); > static char *get_content (struct nbd_handle *, int64_t size); > > @@ -181,13 +182,9 @@ show_one_export (struct nbd_handle *nbd, const char *desc, > show_boolean ("can_trim", can_trim); > if (can_zero >= 0) > show_boolean ("can_zero", can_zero); > - if (block_minimum > 0) > - fprintf (fp, "\t%s: %" PRId64 "\n", "block_size_minimum", block_minimum); > - if (block_preferred > 0) > - fprintf (fp, "\t%s: %" PRId64 "\n", "block_size_preferred", > - block_preferred); > - if (block_maximum > 0) > - fprintf (fp, "\t%s: %" PRId64 "\n", "block_size_maximum", block_maximum); > + show_size ("block_size_minimum", block_minimum); > + show_size ("block_size_preferred", block_preferred); > + show_size ("block_size_maximum", block_maximum); > } > else { > if (first) > @@ -304,6 +301,21 @@ show_boolean (const char *name, bool cond) > ansi_restore (fp); > } > > +/* Used for displaying sizes in non-JSON output. */ > +void show_size (const char *name, int64_t size) > +{ > + char size_str[HUMAN_SIZE_LONGEST]; > + bool human_size_flag = false; > + > + if (size > 0) { > + human_size (size_str, size, &human_size_flag); > + if (human_size_flag) > + fprintf (fp, "\t%s: %" PRId64 " (%s)\n", name, size, size_str); > + else > + fprintf (fp, "\t%s: %" PRId64 "\n", name, size); > + } > +} > + > static int > collect_context (void *opaque, const char *name) > { > -- > 2.41.0 > > _______________________________________________ > Libguestfs mailing list > Libguestfs at redhat.com > https://listman.redhat.com/mailman/listinfo/libguestfs-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com nbdkit - Flexible, fast NBD server with plugins https://gitlab.com/nbdkit/nbdkit