diff options
-rw-r--r-- | generator/generator_actions.ml | 10 | ||||
-rw-r--r-- | generator/generator_erlang.ml | 15 | ||||
-rw-r--r-- | generator/generator_fish.ml | 10 | ||||
-rw-r--r-- | generator/generator_gobject.ml | 8 | ||||
-rw-r--r-- | generator/generator_java.ml | 4 | ||||
-rw-r--r-- | generator/generator_ocaml.ml | 9 | ||||
-rw-r--r-- | generator/generator_perl.ml | 9 | ||||
-rw-r--r-- | generator/generator_php.ml | 10 | ||||
-rw-r--r-- | generator/generator_python.ml | 9 | ||||
-rw-r--r-- | generator/generator_ruby.ml | 10 | ||||
-rw-r--r-- | generator/generator_tests_c_api.ml | 4 | ||||
-rw-r--r-- | generator/generator_types.ml | 1 |
12 files changed, 49 insertions, 50 deletions
diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml index beb2b3ca..c83bf703 100644 --- a/generator/generator_actions.ml +++ b/generator/generator_actions.ml @@ -31,7 +31,7 @@ let defaults = { name = ""; style = RErr, [], []; proc_nr = None; deprecated_by = None; optional = None; progress = false; camel_name = ""; cancellable = false; config_only = false; - c_function = "" } + c_function = ""; c_optarg_prefix = "" } (* These test functions are used in the language binding tests. *) @@ -9305,9 +9305,13 @@ let non_daemon_functions, daemon_functions = let make_c_function f = match f with | { style = _, _, [] } -> - { f with c_function = "guestfs_" ^ f.name } + { f with + c_function = "guestfs_" ^ f.name; + c_optarg_prefix = "GUESTFS_" ^ String.uppercase f.name } | { style = _, _, (_::_) } -> - { f with c_function = "guestfs_" ^ f.name ^ "_argv" } + { f with + c_function = "guestfs_" ^ f.name ^ "_argv"; + c_optarg_prefix = "GUESTFS_" ^ String.uppercase f.name } in let non_daemon_functions = List.map make_c_function non_daemon_functions in let daemon_functions = List.map make_c_function daemon_functions in diff --git a/generator/generator_erlang.ml b/generator/generator_erlang.ml index 0d81266f..083b573c 100644 --- a/generator/generator_erlang.ml +++ b/generator/generator_erlang.ml @@ -236,7 +236,7 @@ extern void free_strings (char **r); (* The wrapper functions. *) List.iter ( fun { name = name; style = (ret, args, optargs as style); - c_function = c_function } -> + c_function = c_function; c_optarg_prefix = c_optarg_prefix } -> pr "static ETERM *\n"; pr "run_%s (ETERM *message)\n" name; pr "{\n"; @@ -272,13 +272,11 @@ extern void free_strings (char **r); assert false ) args; - let uc_name = String.uppercase name in - (* Optional arguments. *) if optargs <> [] then ( pr "\n"; - pr " struct guestfs_%s_argv optargs_s = { .bitmask = 0 };\n" name; - pr " struct guestfs_%s_argv *optargs = &optargs_s;\n" name; + pr " struct %s optargs_s = { .bitmask = 0 };\n" c_function; + pr " struct %s *optargs = &optargs_s;\n" c_function; pr " ETERM *optargst = ARG (%d);\n" (List.length args); pr " while (!ERL_IS_EMPTY_LIST (optargst)) {\n"; pr " ETERM *hd = ERL_CONS_HEAD (optargst);\n"; @@ -290,7 +288,8 @@ extern void free_strings (char **r); let n = name_of_optargt argt in let uc_n = String.uppercase n in pr " if (atom_equals (hd_name, \"%s\")) {\n" n; - pr " optargs_s.bitmask |= GUESTFS_%s_%s_BITMASK;\n" uc_name uc_n; + pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" + c_optarg_prefix uc_n; pr " optargs_s.%s = " n; (match argt with | OBool _ -> pr "get_bool (hd_value)" @@ -349,8 +348,8 @@ extern void free_strings (char **r); | OBool _ | OInt _ | OInt64 _ -> () | OString n -> let uc_n = String.uppercase n in - pr " if ((optargs_s.bitmask & GUESTFS_%s_%s_BITMASK))\n" - uc_name uc_n; + pr " if ((optargs_s.bitmask & %s_%s_BITMASK))\n" + c_optarg_prefix uc_n; pr " free ((char *) optargs_s.%s);\n" n ) optargs; diff --git a/generator/generator_fish.ml b/generator/generator_fish.ml index 6284a357..12e2acd6 100644 --- a/generator/generator_fish.ml +++ b/generator/generator_fish.ml @@ -297,7 +297,8 @@ Guestfish will prompt for these separately." (* run_<action> actions *) List.iter ( fun { name = name; style = (ret, args, optargs as style); - fish_output = fish_output; c_function = c_function } -> + fish_output = fish_output; c_function = c_function; + c_optarg_prefix = c_optarg_prefix } -> pr "static int\n"; pr "run_%s (const char *cmd, size_t argc, char *argv[])\n" name; pr "{\n"; @@ -337,8 +338,8 @@ Guestfish will prompt for these separately." ) args; if optargs <> [] then ( - pr " struct guestfs_%s_argv optargs_s = { .bitmask = 0 };\n" name; - pr " struct guestfs_%s_argv *optargs = &optargs_s;\n" name + pr " struct %s optargs_s = { .bitmask = 0 };\n" c_function; + pr " struct %s *optargs = &optargs_s;\n" c_function ); if args <> [] || optargs <> [] then @@ -451,7 +452,6 @@ Guestfish will prompt for these separately." * the argument list. *) if optargs <> [] then ( - let uc_name = String.uppercase name in pr "\n"; pr " for (; i < argc; ++i) {\n"; pr " uint64_t this_mask;\n"; @@ -487,7 +487,7 @@ Guestfish will prompt for these separately." | OString n -> pr " optargs_s.%s = &argv[i][%d];\n" n (len+1); ); - pr " this_mask = GUESTFS_%s_%s_BITMASK;\n" uc_name uc_n; + pr " this_mask = %s_%s_BITMASK;\n" c_optarg_prefix uc_n; pr " this_arg = \"%s\";\n" n; pr " }\n"; pr " else "; diff --git a/generator/generator_gobject.ml b/generator/generator_gobject.ml index deca34c7..45bcaa4d 100644 --- a/generator/generator_gobject.ml +++ b/generator/generator_gobject.ml @@ -949,6 +949,7 @@ guestfs_session_close(GuestfsSession *session, GError **err) List.iter ( fun ({ name = name; style = (ret, args, optargs as style); cancellable = cancellable; c_function = c_function; + c_optarg_prefix = c_optarg_prefix; shortdesc = shortdesc; longdesc = longdesc } as f) -> pr "\n"; @@ -1113,11 +1114,10 @@ guestfs_session_close(GuestfsSession *session, GError **err) (* Optargs *) if optargs <> [] then ( - pr " struct guestfs_%s_argv argv;\n" name; - pr " struct guestfs_%s_argv *argvp = NULL;\n\n" name; + pr " struct %s argv;\n" c_function; + pr " struct %s *argvp = NULL;\n\n" c_function; pr " if (optargs) {\n"; - let uc_prefix = "GUESTFS_" ^ String.uppercase name in pr " argv.bitmask = 0;\n\n"; let set_property name typ v_typ get_typ unset = let uc_name = String.uppercase name in @@ -1126,7 +1126,7 @@ guestfs_session_close(GuestfsSession *session, GError **err) pr " g_object_get_property(G_OBJECT(optargs), \"%s\", &%s_v);\n" name name; pr " %s%s = g_value_get_%s(&%s_v);\n" typ name get_typ name; pr " if (%s != %s) {\n" name unset; - pr " argv.bitmask |= %s_%s_BITMASK;\n" uc_prefix uc_name; + pr " argv.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_name; pr " argv.%s = %s;\n" name name; pr " }\n" in diff --git a/generator/generator_java.ml b/generator/generator_java.ml index 2eb40e30..cba0dc86 100644 --- a/generator/generator_java.ml +++ b/generator/generator_java.ml @@ -476,8 +476,8 @@ Java_com_redhat_et_libguestfs_GuestFS__1close ) args; if optargs <> [] then ( - pr " struct guestfs_%s_argv optargs_s;\n" name; - pr " const struct guestfs_%s_argv *optargs = &optargs_s;\n" name + pr " struct %s optargs_s;\n" c_function; + pr " const struct %s *optargs = &optargs_s;\n" c_function ); let needs_i = diff --git a/generator/generator_ocaml.ml b/generator/generator_ocaml.ml index 9eb58302..f54ed2c3 100644 --- a/generator/generator_ocaml.ml +++ b/generator/generator_ocaml.ml @@ -409,7 +409,7 @@ copy_table (char * const * argv) (* The wrappers. *) List.iter ( fun { name = name; style = (ret, args, optargs as style); - c_function = c_function } -> + c_function = c_function; c_optarg_prefix = c_optarg_prefix } -> pr "/* Automatically generated wrapper for function\n"; pr " * "; generate_ocaml_prototype name style; @@ -497,15 +497,14 @@ copy_table (char * const * argv) (* Optional arguments. *) if optargs <> [] then ( - pr " struct guestfs_%s_argv optargs_s = { .bitmask = 0 };\n" name; - pr " struct guestfs_%s_argv *optargs = &optargs_s;\n" name; - let uc_name = String.uppercase name in + pr " struct %s optargs_s = { .bitmask = 0 };\n" c_function; + pr " struct %s *optargs = &optargs_s;\n" c_function; List.iter ( fun argt -> let n = name_of_optargt argt in let uc_n = String.uppercase n in pr " if (%sv != Val_int (0)) {\n" n; - pr " optargs_s.bitmask |= GUESTFS_%s_%s_BITMASK;\n" uc_name uc_n; + pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n; pr " optargs_s.%s = " n; (match argt with | OBool _ -> pr "Bool_val (Field (%sv, 0))" n diff --git a/generator/generator_perl.ml b/generator/generator_perl.ml index da245589..d5cf814a 100644 --- a/generator/generator_perl.ml +++ b/generator/generator_perl.ml @@ -290,7 +290,7 @@ user_cancel (g) List.iter ( fun { name = name; style = (ret, args, optargs as style); - c_function = c_function } -> + c_function = c_function; c_optarg_prefix = c_optarg_prefix } -> (match ret with | RErr -> pr "void\n" | RInt _ -> pr "SV *\n" @@ -367,8 +367,8 @@ user_cancel (g) ); if optargs <> [] then ( - pr " struct guestfs_%s_argv optargs_s = { .bitmask = 0 };\n" name; - pr " struct guestfs_%s_argv *optargs = &optargs_s;\n" name; + pr " struct %s optargs_s = { .bitmask = 0 };\n" c_function; + pr " struct %s *optargs = &optargs_s;\n" c_function; pr " size_t items_i;\n"; ); @@ -403,7 +403,6 @@ user_cancel (g) * variable by hand. *) if optargs <> [] then ( - let uc_name = String.uppercase name in let skip = List.length args + 1 in pr " if (((items - %d) & 1) != 0)\n" skip; pr " croak (\"expecting an even number of extra parameters\");\n"; @@ -426,7 +425,7 @@ user_cancel (g) | OString _ -> pr "SvPV_nolen (ST (items_i+1))" ); pr ";\n"; - pr " this_mask = GUESTFS_%s_%s_BITMASK;\n" uc_name uc_n; + pr " this_mask = %s_%s_BITMASK;\n" c_optarg_prefix uc_n; pr " }\n"; pr " else "; ) optargs; diff --git a/generator/generator_php.ml b/generator/generator_php.ml index 89cf44d5..a382240a 100644 --- a/generator/generator_php.ml +++ b/generator/generator_php.ml @@ -179,7 +179,7 @@ PHP_FUNCTION (guestfs_last_error) (* Now generate the PHP bindings for each action. *) List.iter ( fun { name = shortname; style = ret, args, optargs as style; - c_function = c_function } -> + c_function = c_function; c_optarg_prefix = c_optarg_prefix } -> pr "PHP_FUNCTION (guestfs_%s)\n" shortname; pr "{\n"; pr " zval *z_g;\n"; @@ -204,8 +204,8 @@ PHP_FUNCTION (guestfs_last_error) ) args; if optargs <> [] then ( - pr " struct guestfs_%s_argv optargs_s = { .bitmask = 0 };\n" shortname; - pr " struct guestfs_%s_argv *optargs = &optargs_s;\n" shortname; + pr " struct %s optargs_s = { .bitmask = 0 };\n" c_function; + pr " struct %s *optargs = &optargs_s;\n" c_function; (* XXX Ugh PHP doesn't have proper optional arguments, so we * have to use sentinel values. @@ -331,7 +331,6 @@ PHP_FUNCTION (guestfs_last_error) (* Optional arguments. *) if optargs <> [] then ( - let uc_shortname = String.uppercase shortname in List.iter ( fun argt -> let n = name_of_optargt argt in @@ -344,8 +343,7 @@ PHP_FUNCTION (guestfs_last_error) ); pr ") {\n"; pr " optargs_s.%s = optargs_t_%s;\n" n n; - pr " optargs_s.bitmask |= GUESTFS_%s_%s_BITMASK;\n" - uc_shortname uc_n; + pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n; pr " }\n" ) optargs; pr "\n" diff --git a/generator/generator_python.ml b/generator/generator_python.ml index 306b9834..548094c8 100644 --- a/generator/generator_python.ml +++ b/generator/generator_python.ml @@ -248,7 +248,7 @@ free_strings (char **argv) (* Python wrapper functions. *) List.iter ( fun { name = name; style = (ret, args, optargs as style); - c_function = c_function } -> + c_function = c_function; c_optarg_prefix = c_optarg_prefix } -> pr "static PyObject *\n"; pr "py_guestfs_%s (PyObject *self, PyObject *args)\n" name; pr "{\n"; @@ -259,8 +259,8 @@ free_strings (char **argv) pr " PyObject *py_r;\n"; if optargs <> [] then ( - pr " struct guestfs_%s_argv optargs_s;\n" name; - pr " struct guestfs_%s_argv *optargs = &optargs_s;\n" name; + pr " struct %s optargs_s;\n" c_function; + pr " struct %s *optargs = &optargs_s;\n" c_function; ); (match ret with @@ -388,7 +388,6 @@ free_strings (char **argv) pr "\n"; if optargs <> [] then ( - let uc_name = String.uppercase name in List.iter ( fun argt -> let n = name_of_optargt argt in @@ -400,7 +399,7 @@ free_strings (char **argv) ); pr ") {\n"; pr " optargs_s.%s = optargs_t_%s;\n" n n; - pr " optargs_s.bitmask |= GUESTFS_%s_%s_BITMASK;\n" uc_name uc_n; + pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n; pr " }\n" ) optargs; pr "\n" diff --git a/generator/generator_ruby.ml b/generator/generator_ruby.ml index e7398118..f82d90c2 100644 --- a/generator/generator_ruby.ml +++ b/generator/generator_ruby.ml @@ -360,7 +360,8 @@ ruby_user_cancel (VALUE gv) List.iter ( fun ({ name = name; style = (ret, args, optargs as style); - in_docs = in_docs; c_function = c_function; + in_docs = in_docs; + c_function = c_function; c_optarg_prefix = c_optarg_prefix; shortdesc = shortdesc; longdesc = longdesc } as f) -> (* Generate rdoc. *) if in_docs then ( @@ -478,10 +479,9 @@ ruby_user_cancel (VALUE gv) (* Optional arguments are passed in a final hash parameter. *) if optargs <> [] then ( - let uc_name = String.uppercase name in pr " Check_Type (optargsv, T_HASH);\n"; - pr " struct guestfs_%s_argv optargs_s = { .bitmask = 0 };\n" name; - pr " struct guestfs_%s_argv *optargs = &optargs_s;\n" name; + pr " struct %s optargs_s = { .bitmask = 0 };\n" c_function; + pr " struct %s *optargs = &optargs_s;\n" c_function; pr " VALUE v;\n"; List.iter ( fun argt -> @@ -499,7 +499,7 @@ ruby_user_cancel (VALUE gv) | OString _ -> pr " optargs_s.%s = StringValueCStr (v);\n" n ); - pr " optargs_s.bitmask |= GUESTFS_%s_%s_BITMASK;\n" uc_name uc_n; + pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n; pr " }\n"; ) optargs; pr "\n"; diff --git a/generator/generator_tests_c_api.ml b/generator/generator_tests_c_api.ml index f7c45d2d..6505e910 100644 --- a/generator/generator_tests_c_api.ml +++ b/generator/generator_tests_c_api.ml @@ -760,7 +760,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd = | [] -> assert false | name :: args -> (* Look up the function. *) - let f = + let f = try List.find (fun { name = n } -> n = name) all_functions with Not_found -> failwithf "%s: in test, command %s was not found" test_name name in @@ -826,7 +826,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd = ) args; if optargs <> [] then ( - pr " struct guestfs_%s_argv optargs;\n" name; + pr " struct %s optargs;\n" f.c_function; let _, bitmask = List.fold_left ( fun (shift, bitmask) optarg -> let is_set = diff --git a/generator/generator_types.ml b/generator/generator_types.ml index b65bbb2a..bd1d759b 100644 --- a/generator/generator_types.ml +++ b/generator/generator_types.ml @@ -413,6 +413,7 @@ type action = { * doesn't need to (and shouldn't) be set when defining actions. *) c_function : string; (* name of C API function *) + c_optarg_prefix : string; (* prefix for optarg names/bitmask names *) } (* Field types for structures. *) |