X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=src%2Fgenerator.ml;h=4824438e9e1f8617830bd7d146f743da600a4a4d;hp=691cf606ab79142a17adb8837e39f5f9959a328b;hb=8966b137660fff6619905e842ef793c4c9ed4f6e;hpb=9b41eeb91733ee681a6a804464b6930d42ed8fd1 diff --git a/src/generator.ml b/src/generator.ml index 691cf60..4824438 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -5274,7 +5274,7 @@ static void print_error (guestfs_h *g, void *data, const char *msg) } /* FIXME: nearly identical code appears in fish.c */ -static void print_strings (char const *const *argv) +static void print_strings (char *const *argv) { int argc; @@ -5869,7 +5869,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd = fun i str -> pr " const char *%s_%d = \"%s\";\n" n i (c_quote str); ) strs; - pr " const char *%s[] = {\n" n; + pr " const char *const %s[] = {\n" n; iteri ( fun i _ -> pr " %s_%d,\n" n i ) strs; @@ -5912,7 +5912,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd = | FileIn _, arg | FileOut _, arg -> pr ", \"%s\"" (c_quote arg) | StringList n, _ | DeviceList n, _ -> - pr ", %s" n + pr ", (char **) %s" n | Int _, arg -> let i = try int_of_string arg @@ -6063,6 +6063,21 @@ and generate_fish_cmds () = pr "}\n"; pr "\n"; + let emit_print_list_function typ = + pr "static void print_%s_list (struct guestfs_%s_list *%ss)\n" + typ typ typ; + pr "{\n"; + pr " int i;\n"; + pr "\n"; + pr " for (i = 0; i < %ss->len; ++i) {\n" typ; + pr " printf (\"[%%d] = {\\n\", i);\n"; + pr " print_%s_indent (&%ss->val[i], \" \");\n" typ typ; + pr " printf (\"}\\n\");\n"; + pr " }\n"; + pr "}\n"; + pr "\n"; + in + (* print_* functions *) List.iter ( fun (typ, cols) -> @@ -6119,20 +6134,17 @@ and generate_fish_cmds () = pr " print_%s_indent (%s, \"\");\n" typ typ; pr "}\n"; pr "\n"; - pr "static void print_%s_list (struct guestfs_%s_list *%ss)\n" - typ typ typ; - pr "{\n"; - pr " int i;\n"; - pr "\n"; - pr " for (i = 0; i < %ss->len; ++i) {\n" typ; - pr " printf (\"[%%d] = {\\n\", i);\n"; - pr " print_%s_indent (&%ss->val[i], \" \");\n" typ typ; - pr " printf (\"}\\n\");\n"; - pr " }\n"; - pr "}\n"; - pr "\n"; ) structs; + (* Emit a print_TYPE_list function definition only if that function is used. *) + List.iter ( + function + | typ, (RStructListOnly | RStructAndList) -> + (* generate the function for typ *) + emit_print_list_function typ + | typ, _ -> () (* empty *) + ) rstructs_used; + (* run_ actions *) List.iter ( fun (name, style, _, flags, _, _, _) -> @@ -8588,7 +8600,10 @@ Java_com_redhat_et_libguestfs_GuestFS__1close | RErr | RBool _ | RInt _ | RInt64 _ | RConstString _ | RConstOptString _ | RString _ | RBufferOut _ | RStruct _ | RHashtable _ -> false) || - List.exists (function StringList _ -> true | _ -> false) (snd style) in + List.exists (function + | StringList _ -> true + | DeviceList _ -> true + | _ -> false) (snd style) in if needs_i then pr " int i;\n"; @@ -9016,7 +9031,7 @@ and generate_bindtests () = #define safe_malloc guestfs_safe_malloc static void -print_strings (char * const* const argv) +print_strings (char *const *argv) { int argc;