[Libguestfs] [PATCH 2/3] fish: use the new structs-print.c to print structs

Pino Toscano ptoscano at redhat.com
Wed Feb 24 12:52:03 UTC 2016


Use of the new code to print structs, making sure the layout is the same
as before.
---
 generator/fish.ml | 64 +++++--------------------------------------------------
 1 file changed, 5 insertions(+), 59 deletions(-)

diff --git a/generator/fish.ml b/generator/fish.ml
index c5bf7e0..0cbc781 100644
--- a/generator/fish.ml
+++ b/generator/fish.ml
@@ -94,6 +94,7 @@ let generate_fish_cmds () =
   pr "\n";
   pr "#include \"guestfs.h\"\n";
   pr "#include \"guestfs-internal-frontend.h\"\n";
+  pr "#include \"structs-print.h\"\n";
   pr "\n";
   pr "#include \"fish.h\"\n";
   pr "#include \"fish-cmds.h\"\n";
@@ -255,70 +256,14 @@ Guestfish will prompt for these separately."
     pr "\n";
     pr "  for (i = 0; i < %ss->len; ++i) {\n" typ;
     pr "    printf (\"[%%zu] = {\\n\", i);\n";
-    pr "    print_%s_indent (&%ss->val[i], \"  \");\n" typ typ;
+    pr "    guestfs_int_print_%s_indent (&%ss->val[i], stdout, \"\\n\", \"  \");\n"
+      typ typ;
     pr "    printf (\"}\\n\");\n";
     pr "  }\n";
     pr "}\n";
     pr "\n";
   in
 
-  (* print_* functions *)
-  List.iter (
-    fun { s_name = typ; s_cols = cols } ->
-      let needs_i =
-        List.exists (function (_, (FUUID|FBuffer)) -> true | _ -> false) cols in
-
-      pr "static void\n";
-      pr "print_%s_indent (struct guestfs_%s *%s, const char *indent)\n" typ typ typ;
-      pr "{\n";
-      if needs_i then (
-        pr "  size_t i;\n";
-        pr "\n"
-      );
-      List.iter (
-        function
-        | name, FString ->
-            pr "  printf (\"%%s%s: %%s\\n\", indent, %s->%s);\n" name typ name
-        | name, FUUID ->
-            pr "  printf (\"%%s%s: \", indent);\n" name;
-            pr "  for (i = 0; i < 32; ++i)\n";
-            pr "    printf (\"%%c\", %s->%s[i]);\n" typ name;
-            pr "  printf (\"\\n\");\n"
-        | name, FBuffer ->
-            pr "  printf (\"%%s%s: \", indent);\n" name;
-            pr "  for (i = 0; i < %s->%s_len; ++i)\n" typ name;
-            pr "    if (c_isprint (%s->%s[i]))\n" typ name;
-            pr "      printf (\"%%c\", %s->%s[i]);\n" typ name;
-            pr "    else\n";
-            pr "      printf (\"\\\\x%%02x\", (unsigned) %s->%s[i]);\n"
-               typ name;
-            pr "  printf (\"\\n\");\n"
-        | name, (FUInt64|FBytes) ->
-            pr "  printf (\"%%s%s: %%\" PRIu64 \"\\n\", indent, %s->%s);\n"
-              name typ name
-        | name, FInt64 ->
-            pr "  printf (\"%%s%s: %%\" PRIi64 \"\\n\", indent, %s->%s);\n"
-              name typ name
-        | name, FUInt32 ->
-            pr "  printf (\"%%s%s: %%\" PRIu32 \"\\n\", indent, %s->%s);\n"
-              name typ name
-        | name, FInt32 ->
-            pr "  printf (\"%%s%s: %%\" PRIi32 \"\\n\", indent, %s->%s);\n"
-              name typ name
-        | name, FChar ->
-            pr "  printf (\"%%s%s: %%c\\n\", indent, %s->%s);\n"
-              name typ name
-        | name, FOptPercent ->
-            pr "  if (%s->%s >= 0)\n" typ name;
-            pr "    printf (\"%%s%s: %%g %%%%\\n\", indent, (double) %s->%s);\n"
-              name typ name;
-            pr "  else\n";
-            pr "    printf (\"%%s%s: \\n\", indent);\n" name
-      ) cols;
-      pr "}\n";
-      pr "\n";
-  ) external_structs;
-
   (* Emit a print_TYPE_list function definition only if that function is used. *)
   List.iter (
     function
@@ -335,7 +280,8 @@ Guestfish will prompt for these separately."
         pr "static void\n";
         pr "print_%s (struct guestfs_%s *%s)\n" typ typ typ;
         pr "{\n";
-        pr "  print_%s_indent (%s, \"\");\n" typ typ;
+        pr "  guestfs_int_print_%s_indent (%s, stdout, \"\\n\", \"\");\n"
+          typ typ;
         pr "}\n";
         pr "\n";
     | typ, _ -> () (* empty *)
-- 
2.5.0




More information about the Libguestfs mailing list