summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generator/generator_actions.ml10
-rw-r--r--generator/generator_erlang.ml15
-rw-r--r--generator/generator_fish.ml10
-rw-r--r--generator/generator_gobject.ml8
-rw-r--r--generator/generator_java.ml4
-rw-r--r--generator/generator_ocaml.ml9
-rw-r--r--generator/generator_perl.ml9
-rw-r--r--generator/generator_php.ml10
-rw-r--r--generator/generator_python.ml9
-rw-r--r--generator/generator_ruby.ml10
-rw-r--r--generator/generator_tests_c_api.ml4
-rw-r--r--generator/generator_types.ml1
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. *)