mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
generator: Add new OStringList optional arg type.
This allows lists of strings to be passed as an optional argument.
This commit is contained in:
69
bindtests
69
bindtests
@@ -11,6 +11,7 @@ obool: true
|
||||
oint: 1
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
null
|
||||
[]
|
||||
@@ -24,6 +25,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: 1
|
||||
ostring: string
|
||||
ostringlist: unset
|
||||
|
||||
def
|
||||
[]
|
||||
@@ -37,6 +39,7 @@ obool: false
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
|
||||
|
||||
[]
|
||||
@@ -50,6 +53,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -63,6 +67,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1", "2"]
|
||||
@@ -76,6 +81,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -89,6 +95,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -102,6 +109,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -115,6 +123,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -128,6 +137,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -141,6 +151,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -154,6 +165,7 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
["1"]
|
||||
@@ -167,4 +179,61 @@ obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: unset
|
||||
abc
|
||||
def
|
||||
[]
|
||||
false
|
||||
0
|
||||
0
|
||||
123
|
||||
456
|
||||
<61><62><63><00><61><62><63>
|
||||
obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: []
|
||||
abc
|
||||
def
|
||||
[]
|
||||
false
|
||||
0
|
||||
0
|
||||
123
|
||||
456
|
||||
<61><62><63><00><61><62><63>
|
||||
obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: ["optelem1"]
|
||||
abc
|
||||
def
|
||||
[]
|
||||
false
|
||||
0
|
||||
0
|
||||
123
|
||||
456
|
||||
<61><62><63><00><61><62><63>
|
||||
obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: ["optelem1", "optelem2"]
|
||||
abc
|
||||
def
|
||||
[]
|
||||
false
|
||||
0
|
||||
0
|
||||
123
|
||||
456
|
||||
<61><62><63><00><61><62><63>
|
||||
obool: unset
|
||||
oint: unset
|
||||
oint64: unset
|
||||
ostring: unset
|
||||
ostringlist: ["optelem1", "optelem2", "optelem3"]
|
||||
EOF
|
||||
|
||||
@@ -50,10 +50,11 @@ let test_all_args = [
|
||||
]
|
||||
|
||||
let test_all_optargs = [
|
||||
OBool "obool";
|
||||
OInt "oint";
|
||||
OInt64 "oint64";
|
||||
OString "ostring"
|
||||
OBool "obool";
|
||||
OInt "oint";
|
||||
OInt64 "oint64";
|
||||
OString "ostring";
|
||||
OStringList "ostringlist";
|
||||
]
|
||||
|
||||
let test_all_rets = [
|
||||
|
||||
@@ -117,6 +117,14 @@ print_strings (char *const *argv)
|
||||
| OString n ->
|
||||
let printf_args = sprintf "\"%%s\\n\", optargs->%s" n in
|
||||
check_optarg n printf_args;
|
||||
| OStringList n ->
|
||||
pr " printf (\"%s: \");\n" n;
|
||||
pr " if (optargs->bitmask & GUESTFS_INTERNAL_TEST_%s_BITMASK) {\n"
|
||||
(String.uppercase n);
|
||||
pr " print_strings (optargs->%s);\n" n;
|
||||
pr " } else {\n";
|
||||
pr " printf (\"unset\\n\");\n";
|
||||
pr " }\n";
|
||||
) optargs;
|
||||
pr " /* Java changes stdout line buffering so we need this: */\n";
|
||||
pr " fflush (stdout);\n";
|
||||
@@ -270,6 +278,9 @@ let () =
|
||||
| CallOInt (n, v) -> "~" ^ n ^ ":" ^ string_of_int v
|
||||
| CallOInt64 (n, v) -> "~" ^ n ^ ":" ^ Int64.to_string v ^ "L"
|
||||
| CallOString (n, v) -> "~" ^ n ^ ":\"" ^ v ^ "\""
|
||||
| CallOStringList (n, xs) ->
|
||||
"~" ^ n ^ ":" ^
|
||||
"[|" ^ String.concat ";" (List.map (sprintf "\"%s\"") xs) ^ "|]"
|
||||
) optargs
|
||||
)
|
||||
in
|
||||
@@ -318,6 +329,9 @@ my $g = Sys::Guestfs->new ();
|
||||
| CallOInt (n, v) -> "'" ^ n ^ "' => " ^ string_of_int v
|
||||
| CallOInt64 (n, v) -> "'" ^ n ^ "' => " ^ Int64.to_string v
|
||||
| CallOString (n, v) -> "'" ^ n ^ "' => '" ^ v ^ "'"
|
||||
| CallOStringList (n, xs) ->
|
||||
"'" ^ n ^ "' => " ^
|
||||
"[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]"
|
||||
) optargs
|
||||
)
|
||||
in
|
||||
@@ -363,6 +377,9 @@ g = guestfs.GuestFS ()
|
||||
| CallOInt (n, v) -> n ^ "=" ^ string_of_int v
|
||||
| CallOInt64 (n, v) -> n ^ "=" ^ Int64.to_string v
|
||||
| CallOString (n, v) -> n ^ "=\"" ^ v ^ "\""
|
||||
| CallOStringList (n, xs) ->
|
||||
n ^ "=" ^
|
||||
"[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]"
|
||||
) optargs
|
||||
)
|
||||
in
|
||||
@@ -410,6 +427,9 @@ g = Guestfs::create()
|
||||
| CallOInt (n, v) -> ":" ^ n ^ " => " ^ string_of_int v
|
||||
| CallOInt64 (n, v) -> ":" ^ n ^ " => " ^ Int64.to_string v
|
||||
| CallOString (n, v) -> ":" ^ n ^ " => \"" ^ v ^ "\""
|
||||
| CallOStringList (n, xs) ->
|
||||
":" ^ n ^ " => " ^
|
||||
"[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]"
|
||||
) optargs
|
||||
) ^
|
||||
"}"
|
||||
@@ -453,6 +473,11 @@ public class Bindtests {
|
||||
" put(\"" ^ n ^ "\", " ^ Int64.to_string v ^ "l);"
|
||||
| CallOString (n, v) ->
|
||||
" put(\"" ^ n ^ "\", \"" ^ v ^ "\");"
|
||||
| CallOStringList (n, xs) ->
|
||||
" put(\"" ^ n ^ "\", " ^
|
||||
"new String[]{" ^
|
||||
String.concat "," (List.map (sprintf "\"%s\"") xs) ^
|
||||
"});"
|
||||
) optargs @
|
||||
[ "}};\n" ]
|
||||
| None ->
|
||||
@@ -560,6 +585,12 @@ var o;
|
||||
| CallOInt (n, v) -> n ^ ": " ^ (string_of_int v)
|
||||
| CallOInt64 (n, v) -> n ^ ": " ^ Int64.to_string v
|
||||
| CallOString (n, v) -> n ^ ": \"" ^ v ^ "\""
|
||||
| CallOStringList (n, xs) -> "" (* not implemented XXX *)
|
||||
(*
|
||||
| CallOStringList (n, xs) ->
|
||||
n ^ ": " ^
|
||||
"[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]"
|
||||
*)
|
||||
) optargs
|
||||
)
|
||||
) ^
|
||||
@@ -667,5 +698,29 @@ and generate_lang_bindtests call =
|
||||
CallStringList ["1"]; CallBool false;
|
||||
CallInt 0; CallInt64 0L; CallString ""; CallString "";
|
||||
CallBuffer "abc\000abc"] None;
|
||||
call "internal_test"
|
||||
[CallString "abc"; CallOptString (Some "def");
|
||||
CallStringList []; CallBool false;
|
||||
CallInt 0; CallInt64 0L; CallString "123"; CallString "456";
|
||||
CallBuffer "abc\000abc"]
|
||||
(Some [CallOStringList ("ostringlist", [])]);
|
||||
call "internal_test"
|
||||
[CallString "abc"; CallOptString (Some "def");
|
||||
CallStringList []; CallBool false;
|
||||
CallInt 0; CallInt64 0L; CallString "123"; CallString "456";
|
||||
CallBuffer "abc\000abc"]
|
||||
(Some [CallOStringList ("ostringlist", ["optelem1"])]);
|
||||
call "internal_test"
|
||||
[CallString "abc"; CallOptString (Some "def");
|
||||
CallStringList []; CallBool false;
|
||||
CallInt 0; CallInt64 0L; CallString "123"; CallString "456";
|
||||
CallBuffer "abc\000abc"]
|
||||
(Some [CallOStringList ("ostringlist", ["optelem1"; "optelem2"])]);
|
||||
call "internal_test"
|
||||
[CallString "abc"; CallOptString (Some "def");
|
||||
CallStringList []; CallBool false;
|
||||
CallInt 0; CallInt64 0L; CallString "123"; CallString "456";
|
||||
CallBuffer "abc\000abc"]
|
||||
(Some [CallOStringList ("ostringlist", ["optelem1"; "optelem2"; "optelem3"])]);
|
||||
|
||||
(* XXX Add here tests of the return and error functions. *)
|
||||
|
||||
@@ -210,6 +210,7 @@ and generate_actions_pod_entry ({ c_name = c_name;
|
||||
| OInt n -> pr "int %s,\n" n
|
||||
| OInt64 n -> pr "int64_t %s,\n" n
|
||||
| OString n -> pr "const char *%s,\n" n
|
||||
| OStringList n -> pr "char *const *%s,\n" n
|
||||
) optargs;
|
||||
pr "\n";
|
||||
);
|
||||
@@ -614,7 +615,8 @@ extern GUESTFS_DLL_PUBLIC void *guestfs_next_private (guestfs_h *g, const char *
|
||||
| OBool n -> "int "
|
||||
| OInt n -> "int "
|
||||
| OInt64 n -> "int64_t "
|
||||
| OString n -> "const char *" in
|
||||
| OString n -> "const char *"
|
||||
| OStringList n -> "char *const *" in
|
||||
let uc_shortname = String.uppercase shortname in
|
||||
let n = name_of_optargt argt in
|
||||
let uc_n = String.uppercase n in
|
||||
@@ -862,6 +864,20 @@ trace_send_line (guestfs_h *g)
|
||||
pr " }\n";
|
||||
pr_newline := true
|
||||
|
||||
| OStringList n ->
|
||||
pr " if ((optargs->bitmask & GUESTFS_%s_%s_BITMASK) &&\n"
|
||||
(String.uppercase c_name) (String.uppercase n);
|
||||
pr " optargs->%s == NULL) {\n" n;
|
||||
pr " error (g, \"%%s: %%s: optional list cannot be NULL\",\n";
|
||||
pr " \"%s\", \"%s\");\n" c_name n;
|
||||
let errcode =
|
||||
match errcode_of_ret ret with
|
||||
| `CannotReturnError -> assert false
|
||||
| (`ErrorIsMinusOne |`ErrorIsNULL) as e -> e in
|
||||
pr " return %s;\n" (string_of_errcode errcode);
|
||||
pr " }\n";
|
||||
pr_newline := true
|
||||
|
||||
(* not applicable *)
|
||||
| OBool _ | OInt _ | OInt64 _ -> ()
|
||||
) optargs;
|
||||
@@ -893,8 +909,11 @@ trace_send_line (guestfs_h *g)
|
||||
|
||||
let needs_i =
|
||||
List.exists (function
|
||||
| StringList _ | DeviceList _ -> true
|
||||
| _ -> false) args in
|
||||
| StringList _ | DeviceList _ -> true
|
||||
| _ -> false) args ||
|
||||
List.exists (function
|
||||
| OStringList _ -> true
|
||||
| _ -> false) optargs in
|
||||
if needs_i then (
|
||||
pr " size_t i;\n";
|
||||
pr "\n"
|
||||
@@ -947,11 +966,18 @@ trace_send_line (guestfs_h *g)
|
||||
List.iter (
|
||||
fun argt ->
|
||||
let n = name_of_optargt argt in
|
||||
pr " if (optargs->bitmask & GUESTFS_%s_%s_BITMASK)\n"
|
||||
pr " if (optargs->bitmask & GUESTFS_%s_%s_BITMASK) {\n"
|
||||
(String.uppercase c_name) (String.uppercase n);
|
||||
(match argt with
|
||||
| OString n ->
|
||||
pr " fprintf (trace_fp, \" \\\"%%s:%%s\\\"\", \"%s\", optargs->%s);\n" n n
|
||||
| OStringList n ->
|
||||
pr " fprintf (trace_fp, \" \\\"%%s:\", \"%s\");\n" n;
|
||||
pr " for (i = 0; optargs->%s[i] != NULL; ++i) {\n" n;
|
||||
pr " if (i > 0) fputc (' ', trace_fp);\n";
|
||||
pr " fputs (optargs->%s[i], trace_fp);\n" n;
|
||||
pr " }\n";
|
||||
pr " fputc ('\\\"', trace_fp);\n"
|
||||
| OBool n ->
|
||||
pr " fprintf (trace_fp, \" \\\"%%s:%%s\\\"\", \"%s\", optargs->%s ? \"true\" : \"false\");\n" n n
|
||||
| OInt n ->
|
||||
@@ -959,6 +985,7 @@ trace_send_line (guestfs_h *g)
|
||||
| OInt64 n ->
|
||||
pr " fprintf (trace_fp, \" \\\"%%s:%%\" PRIi64 \"\\\"\", \"%s\", optargs->%s);\n" n n
|
||||
);
|
||||
pr " }\n"
|
||||
) optargs;
|
||||
|
||||
pr " trace_send_line (g);\n";
|
||||
@@ -1239,19 +1266,28 @@ trace_send_line (guestfs_h *g)
|
||||
List.iter (
|
||||
fun argt ->
|
||||
let n = name_of_optargt argt in
|
||||
pr " if (optargs->bitmask & GUESTFS_%s_%s_BITMASK)\n"
|
||||
pr " if (optargs->bitmask & GUESTFS_%s_%s_BITMASK) {\n"
|
||||
(String.uppercase c_name) (String.uppercase n);
|
||||
(match argt with
|
||||
| OBool n
|
||||
| OInt n
|
||||
| OInt64 n ->
|
||||
pr " args.%s = optargs->%s;\n" n n;
|
||||
pr " else\n";
|
||||
pr " args.%s = 0;\n" n
|
||||
pr " } else {\n";
|
||||
pr " args.%s = 0;\n" n;
|
||||
pr " }\n";
|
||||
| OString n ->
|
||||
pr " args.%s = (char *) optargs->%s;\n" n n;
|
||||
pr " else\n";
|
||||
pr " args.%s = (char *) \"\";\n" n
|
||||
pr " } else {\n";
|
||||
pr " args.%s = (char *) \"\";\n" n;
|
||||
pr " }\n";
|
||||
| OStringList n ->
|
||||
pr " args.%s.%s_val = (char **) optargs->%s;\n" n n n;
|
||||
pr " for (args.%s.%s_len = 0; optargs->%s[args.%s.%s_len]; args.%s.%s_len++) ;\n" n n n n n n n;
|
||||
pr " } else {\n";
|
||||
pr " args.%s.%s_len = 0;\n" n n;
|
||||
pr " args.%s.%s_val = NULL;\n" n n;
|
||||
pr " }\n";
|
||||
)
|
||||
) optargs;
|
||||
|
||||
@@ -1489,6 +1525,7 @@ trace_send_line (guestfs_h *g)
|
||||
| OBool _ | OInt _ -> pr "int"
|
||||
| OInt64 _ -> pr "int64_t"
|
||||
| OString _ -> pr "const char *"
|
||||
| OStringList _ -> pr "char *const *"
|
||||
);
|
||||
pr ");\n";
|
||||
pr " break;\n";
|
||||
|
||||
@@ -338,6 +338,7 @@ extern void free_strings (char **r);
|
||||
| OInt _ -> pr "ERL_INT_VALUE (hd_value)"
|
||||
| OInt64 _ -> pr "ERL_LL_VALUE (hd_value)"
|
||||
| OString _ -> pr "erl_iolist_to_string (hd_value)"
|
||||
| OStringList n -> pr "get_string_list (hd_value)"
|
||||
);
|
||||
pr ";\n";
|
||||
pr " }\n";
|
||||
@@ -393,6 +394,11 @@ extern void free_strings (char **r);
|
||||
pr " if ((optargs_s.bitmask & %s_%s_BITMASK))\n"
|
||||
c_optarg_prefix uc_n;
|
||||
pr " free ((char *) optargs_s.%s);\n" n
|
||||
| OStringList n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if ((optargs_s.bitmask & %s_%s_BITMASK))\n"
|
||||
c_optarg_prefix uc_n;
|
||||
pr " free_strings ((char **) optargs_s.%s);\n" n
|
||||
) optargs;
|
||||
|
||||
(match errcode_of_ret ret with
|
||||
|
||||
@@ -35,7 +35,8 @@ let doc_opttype_of = function
|
||||
| OBool n -> "true|false"
|
||||
| OInt n
|
||||
| OInt64 n -> "N"
|
||||
| OString n -> ".."
|
||||
| OString n
|
||||
| OStringList n -> ".."
|
||||
|
||||
let get_aliases { fish_alias = fish_alias; non_c_aliases = non_c_aliases } =
|
||||
let non_c_aliases =
|
||||
@@ -494,6 +495,9 @@ Guestfish will prompt for these separately."
|
||||
(sprintf "optargs_s.%s" n) "out"
|
||||
| OString n ->
|
||||
pr " optargs_s.%s = &argv[i][%d];\n" n (len+1);
|
||||
| OStringList name ->
|
||||
pr " optargs_s.%s = parse_string_list (&argv[i][%d]);\n" name (len+1);
|
||||
pr " if (optargs_s.%s == NULL) goto out;\n" name
|
||||
);
|
||||
pr " this_mask = %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " this_arg = \"%s\";\n" n;
|
||||
@@ -600,6 +604,16 @@ Guestfish will prompt for these separately."
|
||||
(match ret with
|
||||
| RConstOptString _ -> ()
|
||||
| _ -> pr " out:\n");
|
||||
List.iter (
|
||||
function
|
||||
| OStringList n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if ((optargs_s.bitmask & %s_%s_BITMASK) &&\n"
|
||||
c_optarg_prefix uc_n;
|
||||
pr " optargs_s.%s != NULL)\n" n;
|
||||
pr " free_strings ((char **) optargs_s.%s);\n" n
|
||||
| OBool _ | OInt _ | OInt64 _ | OString _ -> ()
|
||||
) (List.rev optargs);
|
||||
List.iter (
|
||||
function
|
||||
| Device _ | String _
|
||||
@@ -857,9 +871,7 @@ and generate_fish_actions_pod () =
|
||||
| Pointer _ -> assert false
|
||||
) args;
|
||||
List.iter (
|
||||
function
|
||||
| (OBool n | OInt n | OInt64 n | OString n) as arg ->
|
||||
pr " [%s:%s]" n (doc_opttype_of arg)
|
||||
fun arg -> pr " [%s:%s]" (name_of_optargt arg) (doc_opttype_of arg)
|
||||
) optargs;
|
||||
pr "\n";
|
||||
pr "\n";
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
|
||||
(* Please read generator/README first. *)
|
||||
|
||||
(* NB: This is missing support for OStringList. *)
|
||||
|
||||
open Printf
|
||||
|
||||
open Generator_actions
|
||||
@@ -371,14 +373,12 @@ let generate_gobject_optargs_source name optargs f () =
|
||||
|
||||
pr "struct _%sPrivate {\n" camel_name;
|
||||
List.iter (
|
||||
fun optargt ->
|
||||
let name = name_of_optargt optargt in
|
||||
let typ = match optargt with
|
||||
| OBool n -> "GuestfsTristate "
|
||||
| OInt n -> "gint "
|
||||
| OInt64 n -> "gint64 "
|
||||
| OString n -> "gchar *" in
|
||||
pr " %s%s;\n" typ name;
|
||||
function
|
||||
| OBool n -> pr " GuestfsTristate %s;\n" n
|
||||
| OInt n -> pr " gint %s;\n" n
|
||||
| OInt64 n -> pr " gint64 %s;\n" n
|
||||
| OString n -> pr " gchar *%s;\n" n
|
||||
| OStringList _ -> pr " /* OStringList not implemented yet */\n"
|
||||
) optargs;
|
||||
pr "};\n\n";
|
||||
|
||||
@@ -401,21 +401,23 @@ let generate_gobject_optargs_source name optargs f () =
|
||||
|
||||
pr " switch (property_id) {\n";
|
||||
List.iter (
|
||||
fun optargt ->
|
||||
function OStringList _ -> () (* XXX *)
|
||||
| optargt ->
|
||||
let optname = name_of_optargt optargt in
|
||||
let uc_optname = String.uppercase optname in
|
||||
pr " case PROP_GUESTFS_%s_%s:\n" uc_name uc_optname;
|
||||
(match optargt with
|
||||
| OString n ->
|
||||
pr " g_free(priv->%s);\n" n;
|
||||
| OBool _ | OInt _ | OInt64 _ -> ());
|
||||
let set_value_func = match optargt with
|
||||
| OBool _ -> "g_value_get_enum"
|
||||
| OInt _ -> "g_value_get_int"
|
||||
| OInt64 _ -> "g_value_get_int64"
|
||||
| OString _ -> "g_value_dup_string"
|
||||
in
|
||||
pr " priv->%s = %s(value);\n" optname set_value_func;
|
||||
| OBool _ | OInt _ | OInt64 _ -> ()
|
||||
| OStringList _ -> () (* XXX *));
|
||||
(match optargt with
|
||||
| OBool n -> pr " priv->%s = g_value_get_enum (value);\n" n
|
||||
| OInt n -> pr " priv->%s = g_value_get_int (value);\n" n
|
||||
| OInt64 n -> pr " priv->%s = g_value_get_int64 (value);\n" n
|
||||
| OString n -> pr " priv->%s = g_value_dup_string (value);\n" n
|
||||
| OStringList _ -> ()
|
||||
);
|
||||
pr " break;\n\n";
|
||||
) optargs;
|
||||
pr " default:\n";
|
||||
@@ -432,7 +434,8 @@ let generate_gobject_optargs_source name optargs f () =
|
||||
|
||||
pr " switch (property_id) {\n";
|
||||
List.iter (
|
||||
fun optargt ->
|
||||
function OStringList _ -> () (* XXX *)
|
||||
| optargt ->
|
||||
let optname = name_of_optargt optargt in
|
||||
let uc_optname = String.uppercase optname in
|
||||
pr " case PROP_GUESTFS_%s_%s:\n" uc_name uc_optname;
|
||||
@@ -441,6 +444,7 @@ let generate_gobject_optargs_source name optargs f () =
|
||||
| OInt _ -> "int"
|
||||
| OInt64 _ -> "int64"
|
||||
| OString _ -> "string"
|
||||
| OStringList _ -> "" (* XXX *)
|
||||
in
|
||||
pr " g_value_set_%s(value, priv->%s);\n" set_value_func optname;
|
||||
pr " break;\n\n";
|
||||
@@ -460,6 +464,7 @@ let generate_gobject_optargs_source name optargs f () =
|
||||
function
|
||||
| OString n ->
|
||||
pr " g_free(priv->%s);\n" n
|
||||
| OStringList n -> () (* XXX *)
|
||||
| OBool _ | OInt _ | OInt64 _ -> ()
|
||||
) optargs;
|
||||
pr "\n";
|
||||
@@ -475,7 +480,8 @@ let generate_gobject_optargs_source name optargs f () =
|
||||
pr " object_class->get_property = guestfs_%s_get_property;\n\n" name;
|
||||
|
||||
List.iter (
|
||||
fun optargt ->
|
||||
function OStringList _ -> () (* XXX *)
|
||||
| optargt ->
|
||||
let optname = name_of_optargt optargt in
|
||||
let type_spec, type_init, type_desc =
|
||||
match optargt with
|
||||
@@ -487,6 +493,7 @@ let generate_gobject_optargs_source name optargs f () =
|
||||
"int64", "G_MININT64, G_MAXINT64, -1", "A 64-bit integer."
|
||||
| OString n ->
|
||||
"string", "NULL", "A string."
|
||||
| OStringList n -> "", "", "" (* XXX *)
|
||||
in
|
||||
pr " /**\n";
|
||||
pr " * %s:%s:\n" camel_name optname;
|
||||
@@ -1140,6 +1147,8 @@ guestfs_session_close(GuestfsSession *session, GError **err)
|
||||
set_property n "gint64 " "G_TYPE_INT64" "int64" "-1"
|
||||
| OString n ->
|
||||
set_property n "const gchar *" "G_TYPE_STRING" "string" "NULL"
|
||||
| OStringList n ->
|
||||
() (* XXX *)
|
||||
) optargs;
|
||||
pr " argvp = &argv;\n";
|
||||
pr " }\n"
|
||||
|
||||
@@ -144,7 +144,8 @@ public class GuestFS {
|
||||
| OBool n -> "boolean", "Boolean", ".booleanValue()", n, "false"
|
||||
| OInt n -> "int", "Integer", ".intValue()", n, "0"
|
||||
| OInt64 n -> "long", "Long", ".longValue()", n, "0"
|
||||
| OString n -> "String", "String", "", n, "\"\"" in
|
||||
| OString n -> "String", "String", "", n, "\"\""
|
||||
| OStringList n -> "String[]", "String[]", "", n, "new String[]{}" in
|
||||
pr " %s %s = %s;\n" t n default;
|
||||
pr " _optobj = null;\n";
|
||||
pr " if (optargs != null)\n";
|
||||
@@ -343,6 +344,7 @@ and generate_java_prototype ?(public=false) ?(privat=false) ?(native=false)
|
||||
| OInt n -> pr ", int %s" n
|
||||
| OInt64 n -> pr ", long %s" n
|
||||
| OString n -> pr ", String %s" n
|
||||
| OStringList n -> pr ", String[] %s" n
|
||||
) optargs
|
||||
)
|
||||
);
|
||||
@@ -480,6 +482,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close
|
||||
| OInt n -> pr ", jint j%s" n
|
||||
| OInt64 n -> pr ", jlong j%s" n
|
||||
| OString n -> pr ", jstring j%s" n
|
||||
| OStringList n -> pr ", jobjectArray j%s" n
|
||||
) optargs
|
||||
);
|
||||
pr ")\n";
|
||||
@@ -546,7 +549,15 @@ Java_com_redhat_et_libguestfs_GuestFS__1close
|
||||
|
||||
if optargs <> [] then (
|
||||
pr " struct %s optargs_s;\n" c_function;
|
||||
pr " const struct %s *optargs = &optargs_s;\n" c_function
|
||||
pr " const struct %s *optargs = &optargs_s;\n" c_function;
|
||||
|
||||
List.iter (
|
||||
function
|
||||
| OBool _ | OInt _ | OInt64 _ | OString _ -> ()
|
||||
| OStringList n ->
|
||||
pr " size_t %s_len;\n" n;
|
||||
pr " char **%s;\n" n
|
||||
) optargs
|
||||
);
|
||||
|
||||
let needs_i =
|
||||
@@ -556,9 +567,12 @@ Java_com_redhat_et_libguestfs_GuestFS__1close
|
||||
| RConstOptString _
|
||||
| RString _ | RBufferOut _ | RStruct _ -> false) ||
|
||||
List.exists (function
|
||||
| StringList _ -> true
|
||||
| DeviceList _ -> true
|
||||
| _ -> false) args in
|
||||
| StringList _ -> true
|
||||
| DeviceList _ -> true
|
||||
| _ -> false) args ||
|
||||
List.exists (function
|
||||
| OStringList _ -> true
|
||||
| _ -> false) optargs in
|
||||
if needs_i then
|
||||
pr " size_t i;\n";
|
||||
|
||||
@@ -600,7 +614,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close
|
||||
) args;
|
||||
|
||||
if optargs <> [] then (
|
||||
pr " optargs_s.bitmask = joptargs_bitmask;\n";
|
||||
pr "\n";
|
||||
List.iter (
|
||||
function
|
||||
| OBool n | OInt n | OInt64 n ->
|
||||
@@ -608,7 +622,18 @@ Java_com_redhat_et_libguestfs_GuestFS__1close
|
||||
| OString n ->
|
||||
pr " optargs_s.%s = (*env)->GetStringUTFChars (env, j%s, NULL);\n"
|
||||
n n
|
||||
| OStringList n ->
|
||||
pr " %s_len = (*env)->GetArrayLength (env, j%s);\n" n n;
|
||||
pr " %s = guestfs_safe_malloc (g, sizeof (char *) * (%s_len+1));\n" n n;
|
||||
pr " for (i = 0; i < %s_len; ++i) {\n" n;
|
||||
pr " jobject o = (*env)->GetObjectArrayElement (env, j%s, i);\n"
|
||||
n;
|
||||
pr " %s[i] = (char *) (*env)->GetStringUTFChars (env, o, NULL);\n" n;
|
||||
pr " }\n";
|
||||
pr " %s[%s_len] = NULL;\n" n n;
|
||||
pr " optargs_s.%s = %s;\n" n n
|
||||
) optargs;
|
||||
pr " optargs_s.bitmask = joptargs_bitmask;\n";
|
||||
);
|
||||
|
||||
pr "\n";
|
||||
@@ -653,6 +678,13 @@ Java_com_redhat_et_libguestfs_GuestFS__1close
|
||||
| OBool n | OInt n | OInt64 n -> ()
|
||||
| OString n ->
|
||||
pr " (*env)->ReleaseStringUTFChars (env, j%s, optargs_s.%s);\n" n n
|
||||
| OStringList n ->
|
||||
pr " for (i = 0; i < %s_len; ++i) {\n" n;
|
||||
pr " jobject o = (*env)->GetObjectArrayElement (env, j%s, i);\n"
|
||||
n;
|
||||
pr " (*env)->ReleaseStringUTFChars (env, o, optargs_s.%s[i]);\n" n;
|
||||
pr " }\n";
|
||||
pr " free (%s);\n" n
|
||||
) optargs;
|
||||
|
||||
pr "\n";
|
||||
|
||||
@@ -532,6 +532,8 @@ copy_table (char * const * argv)
|
||||
| OInt64 _ -> pr "Int64_val (Field (%sv, 0))" n
|
||||
| OString _ ->
|
||||
pr "guestfs_safe_strdup (g, String_val (Field (%sv, 0)))" n
|
||||
| OStringList n ->
|
||||
pr "ocaml_guestfs_strings_val (g, Field (%sv, 0))\n" n
|
||||
);
|
||||
pr ";\n";
|
||||
pr " }\n";
|
||||
@@ -584,6 +586,9 @@ copy_table (char * const * argv)
|
||||
| OString n ->
|
||||
pr " if (%sv != Val_int (0))\n" n;
|
||||
pr " free ((char *) optargs_s.%s);\n" n
|
||||
| OStringList n ->
|
||||
pr " if (%sv != Val_int (0))\n" n;
|
||||
pr " ocaml_guestfs_free_strings ((char **) optargs_s.%s);\n" n;
|
||||
) optargs;
|
||||
|
||||
(match errcode_of_ret ret with
|
||||
@@ -693,6 +698,7 @@ and generate_ocaml_function_type ?(extra_unit = false) (ret, args, optargs) =
|
||||
| OInt n -> pr "?%s:int -> " n
|
||||
| OInt64 n -> pr "?%s:int64 -> " n
|
||||
| OString n -> pr "?%s:string -> " n
|
||||
| OStringList n -> pr "?%s:string array -> " n
|
||||
) optargs;
|
||||
List.iter (
|
||||
function
|
||||
|
||||
@@ -417,14 +417,33 @@ user_cancel (g)
|
||||
let n = name_of_optargt argt in
|
||||
let uc_n = String.uppercase n in
|
||||
pr "if (strcmp (this_arg, \"%s\") == 0) {\n" n;
|
||||
pr " optargs_s.%s = " n;
|
||||
(match argt with
|
||||
| OBool _
|
||||
| OInt _
|
||||
| OInt64 _ -> pr "SvIV (ST (items_i+1))"
|
||||
| OString _ -> pr "SvPV_nolen (ST (items_i+1))"
|
||||
| OInt64 _ ->
|
||||
pr " optargs_s.%s = SvIV (ST (items_i+1));\n" n;
|
||||
| OString _ ->
|
||||
pr " optargs_s.%s = SvPV_nolen (ST (items_i+1));\n" n;
|
||||
| OStringList _ ->
|
||||
pr " size_t i, len;\n";
|
||||
pr " char **r;\n";
|
||||
pr " AV *av;\n";
|
||||
pr " SV **svp;\n";
|
||||
pr "\n";
|
||||
pr " /* XXX More checking required here. */\n";
|
||||
pr " av = (AV *) SvRV (ST (items_i+1));\n";
|
||||
pr "\n";
|
||||
pr " /* Note av_len returns index of final element. */\n";
|
||||
pr " len = av_len (av) + 1;\n";
|
||||
pr "\n";
|
||||
pr " r = malloc ((len+1) * sizeof (char *));\n";
|
||||
pr " for (i = 0; i < len; ++i) {\n";
|
||||
pr " svp = av_fetch (av, i, 0);\n";
|
||||
pr " r[i] = SvPV_nolen (*svp);\n";
|
||||
pr " }\n";
|
||||
pr " r[i] = NULL;\n";
|
||||
pr " optargs_s.%s = r;\n" n
|
||||
);
|
||||
pr ";\n";
|
||||
pr " this_mask = %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n";
|
||||
pr " else ";
|
||||
|
||||
@@ -220,6 +220,8 @@ PHP_FUNCTION (guestfs_last_error)
|
||||
| OString n ->
|
||||
pr " char *optargs_t_%s = NULL;\n" n;
|
||||
pr " int optargs_t_%s_size = -1;\n" n
|
||||
| OStringList n ->
|
||||
pr " zval *z_%s;\n" n
|
||||
) optargs
|
||||
);
|
||||
|
||||
@@ -247,6 +249,7 @@ PHP_FUNCTION (guestfs_last_error)
|
||||
| OBool _ -> "b"
|
||||
| OInt _ | OInt64 _ -> "l"
|
||||
| OString _ -> "s"
|
||||
| OStringList _ -> "a"
|
||||
) optargs
|
||||
)
|
||||
else param_string in
|
||||
@@ -273,6 +276,8 @@ PHP_FUNCTION (guestfs_last_error)
|
||||
pr ", &optargs_t_%s" n
|
||||
| OString n ->
|
||||
pr ", &optargs_t_%s, &optargs_t_%s_size" n n
|
||||
| OStringList n ->
|
||||
pr ", &z_%s" n
|
||||
) optargs;
|
||||
pr ") == FAILURE) {\n";
|
||||
pr " RETURN_FALSE;\n";
|
||||
@@ -332,19 +337,52 @@ PHP_FUNCTION (guestfs_last_error)
|
||||
(* Optional arguments. *)
|
||||
if optargs <> [] then (
|
||||
List.iter (
|
||||
fun argt ->
|
||||
let n = name_of_optargt argt in
|
||||
function
|
||||
| OBool n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if (optargs_t_%s != " n;
|
||||
(match argt with
|
||||
| OBool _ -> pr "((zend_bool)-1)"
|
||||
| OInt _ | OInt64 _ -> pr "-1"
|
||||
| OString _ -> pr "NULL"
|
||||
);
|
||||
pr ") {\n";
|
||||
pr " if (optargs_t_%s != (zend_bool)-1) {\n" n;
|
||||
pr " optargs_s.%s = optargs_t_%s;\n" n n;
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n"
|
||||
| OInt n | OInt64 n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if (optargs_t_%s != -1) {\n" n;
|
||||
pr " optargs_s.%s = optargs_t_%s;\n" n n;
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n"
|
||||
| OString n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if (optargs_t_%s != NULL) {\n" n;
|
||||
pr " optargs_s.%s = optargs_t_%s;\n" n n;
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n"
|
||||
| OStringList n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if (z_%s != NULL) {\n" n;
|
||||
pr " char **r;\n";
|
||||
pr " HashTable *a;\n";
|
||||
pr " int n;\n";
|
||||
pr " HashPosition p;\n";
|
||||
pr " zval **d;\n";
|
||||
pr " size_t c = 0;\n";
|
||||
pr "\n";
|
||||
pr " a = Z_ARRVAL_P (z_%s);\n" n;
|
||||
pr " n = zend_hash_num_elements (a);\n";
|
||||
pr " r = safe_emalloc (n + 1, sizeof (char *), 0);\n";
|
||||
pr " for (zend_hash_internal_pointer_reset_ex (a, &p);\n";
|
||||
pr " zend_hash_get_current_data_ex (a, (void **) &d, &p) == SUCCESS;\n";
|
||||
pr " zend_hash_move_forward_ex (a, &p)) {\n";
|
||||
pr " zval t = **d;\n";
|
||||
pr " zval_copy_ctor (&t);\n";
|
||||
pr " convert_to_string (&t);\n";
|
||||
pr " r[c] = Z_STRVAL (t);\n";
|
||||
pr " c++;\n";
|
||||
pr " }\n";
|
||||
pr " r[c] = NULL;\n";
|
||||
pr " optargs_s.%s = r;\n" n;
|
||||
pr "\n";
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n";
|
||||
) optargs;
|
||||
pr "\n"
|
||||
);
|
||||
|
||||
@@ -311,6 +311,7 @@ free_strings (char **argv)
|
||||
| OInt n -> pr " int optargs_t_%s = -1;\n" n
|
||||
| OInt64 n -> pr " long long optargs_t_%s = -1;\n" n
|
||||
| OString n -> pr " const char *optargs_t_%s = NULL;\n" n
|
||||
| OStringList n -> pr " PyObject *py_%s;\n" n
|
||||
) optargs
|
||||
);
|
||||
|
||||
@@ -346,6 +347,7 @@ free_strings (char **argv)
|
||||
| OBool _ | OInt _ -> pr "i"
|
||||
| OInt64 _ -> pr "L"
|
||||
| OString _ -> pr "z" (* because we use None to mean not set *)
|
||||
| OStringList _ -> pr "O"
|
||||
) optargs;
|
||||
);
|
||||
|
||||
@@ -367,6 +369,7 @@ free_strings (char **argv)
|
||||
List.iter (
|
||||
function
|
||||
| OBool n | OInt n | OInt64 n | OString n -> pr ", &optargs_t_%s" n
|
||||
| OStringList n -> pr ", &py_%s" n
|
||||
) optargs;
|
||||
|
||||
pr "))\n";
|
||||
@@ -389,18 +392,26 @@ free_strings (char **argv)
|
||||
|
||||
if optargs <> [] then (
|
||||
List.iter (
|
||||
fun argt ->
|
||||
let n = name_of_optargt argt in
|
||||
function
|
||||
| OBool n | OInt n | OInt64 n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if (optargs_t_%s != " n;
|
||||
(match argt with
|
||||
| OBool _ | OInt _ | OInt64 _ -> pr "-1"
|
||||
| OString _ -> pr "NULL"
|
||||
);
|
||||
pr ") {\n";
|
||||
pr " if (optargs_t_%s != -1) {\n" n;
|
||||
pr " optargs_s.%s = optargs_t_%s;\n" n n;
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n"
|
||||
| OString n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if (optargs_t_%s != NULL) {\n" n;
|
||||
pr " optargs_s.%s = optargs_t_%s;\n" n n;
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n"
|
||||
| OStringList n ->
|
||||
let uc_n = String.uppercase n in
|
||||
pr " if (py_%s != Py_None) {\n" n;
|
||||
pr " optargs_s.%s = get_string_list (py_%s);\n" n n;
|
||||
pr " if (!optargs_s.%s) return NULL;\n" n;
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n"
|
||||
) optargs;
|
||||
pr "\n"
|
||||
);
|
||||
@@ -431,6 +442,14 @@ free_strings (char **argv)
|
||||
pr " free (%s);\n" n
|
||||
) args;
|
||||
|
||||
List.iter (
|
||||
function
|
||||
| OBool _ | OInt _ | OInt64 _ | OString _ -> ()
|
||||
| OStringList n ->
|
||||
pr " if (py_%s != Py_None)\n" n;
|
||||
pr " free (optargs_s.%s);\n" n
|
||||
) optargs;
|
||||
|
||||
(match errcode_of_ret ret with
|
||||
| `CannotReturnError -> ()
|
||||
| `ErrorIsMinusOne ->
|
||||
@@ -706,7 +725,7 @@ class GuestFS:
|
||||
List.iter (
|
||||
function
|
||||
| OBool n | OInt n | OInt64 n -> pr ", %s=-1" n
|
||||
| OString n -> pr ", %s=None" n
|
||||
| OString n | OStringList n -> pr ", %s=None" n
|
||||
) optargs;
|
||||
pr "):\n";
|
||||
|
||||
|
||||
@@ -535,6 +535,21 @@ ruby_user_cancel (VALUE gv)
|
||||
pr " optargs_s.%s = NUM2LL (v);\n" n;
|
||||
| OString _ ->
|
||||
pr " optargs_s.%s = StringValueCStr (v);\n" n
|
||||
| OStringList _ ->
|
||||
pr " Check_Type (v, T_ARRAY);\n";
|
||||
pr " {\n";
|
||||
pr " size_t i, len;\n";
|
||||
pr " char **r;\n";
|
||||
pr "\n";
|
||||
pr " len = RARRAY_LEN (v);\n";
|
||||
pr " r = ALLOC_N (char *, len+1);\n";
|
||||
pr " for (i = 0; i < len; ++i) {\n";
|
||||
pr " volatile VALUE sv = rb_ary_entry (v, i);\n";
|
||||
pr " r[i] = StringValueCStr (sv);\n";
|
||||
pr " }\n";
|
||||
pr " r[len] = NULL;\n";
|
||||
pr " optargs_s.%s = r;\n" n;
|
||||
pr " }\n"
|
||||
);
|
||||
pr " optargs_s.bitmask |= %s_%s_BITMASK;\n" c_optarg_prefix uc_n;
|
||||
pr " }\n";
|
||||
|
||||
@@ -852,7 +852,22 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd =
|
||||
pr " optargs.%s = %Ld;\n" n i; true
|
||||
| OString n, "NOARG" -> false
|
||||
| OString n, arg ->
|
||||
pr " optargs.%s = \"%s\";\n" n (c_quote arg); true in
|
||||
pr " optargs.%s = \"%s\";\n" n (c_quote arg); true
|
||||
| OStringList n, "NOARG" -> false
|
||||
| OStringList n, "" ->
|
||||
pr " const char *const %s[1] = { NULL };\n" n; true
|
||||
| OStringList n, arg ->
|
||||
let strs = string_split " " arg in
|
||||
iteri (
|
||||
fun i str ->
|
||||
pr " const char *%s_%d = \"%s\";\n" n i (c_quote str);
|
||||
) strs;
|
||||
pr " const char *const %s[] = {\n" n;
|
||||
iteri (
|
||||
fun i _ -> pr " %s_%d,\n" n i
|
||||
) strs;
|
||||
pr " NULL\n";
|
||||
pr " };\n"; true in
|
||||
let bit = if is_set then Int64.shift_left 1L shift else 0L in
|
||||
let bitmask = Int64.logor bitmask bit in
|
||||
let shift = shift + 1 in
|
||||
|
||||
@@ -210,6 +210,8 @@ and optargt =
|
||||
| OInt of string (* int (smallish ints, signed, <= 31 bits) *)
|
||||
| OInt64 of string (* any 64 bit int *)
|
||||
| OString of string (* const char *name, cannot be NULL *)
|
||||
| OStringList of string (* char **strings, neither the list nor any
|
||||
string may be NULL *)
|
||||
|
||||
type errcode = [ `CannotReturnError | `ErrorIsMinusOne | `ErrorIsNULL ]
|
||||
|
||||
@@ -451,3 +453,4 @@ type call_optargt =
|
||||
| CallOInt of string * int
|
||||
| CallOInt64 of string * int64
|
||||
| CallOString of string * string
|
||||
| CallOStringList of string * string list
|
||||
|
||||
@@ -256,7 +256,7 @@ let name_of_argt = function
|
||||
| FileIn n | FileOut n | BufferIn n | Key n | Pointer (_, n) -> n
|
||||
|
||||
let name_of_optargt = function
|
||||
| OBool n | OInt n | OInt64 n | OString n -> n
|
||||
| OBool n | OInt n | OInt64 n | OString n | OStringList n -> n
|
||||
|
||||
let seq_of_test = function
|
||||
| TestRun s | TestOutput (s, _) | TestOutputList (s, _)
|
||||
@@ -360,4 +360,5 @@ let args_of_optargs optargs =
|
||||
| OInt n -> Int n
|
||||
| OInt64 n -> Int64 n
|
||||
| OString n -> String n
|
||||
| OStringList n -> StringList n
|
||||
) optargs;
|
||||
|
||||
@@ -23,6 +23,14 @@ if [ -z "$GJS" ]; then
|
||||
exit 77
|
||||
fi
|
||||
|
||||
rm -f bindtests.tmp
|
||||
|
||||
$GJS $srcdir/bindtests.js > bindtests.tmp
|
||||
diff -u ${srcdir}/../bindtests bindtests.tmp
|
||||
|
||||
# OStringList is not implemented in GObject bindings yet,
|
||||
# so we have to hack the results. XXX
|
||||
diff -I ^ostringlist: -u ${srcdir}/../bindtests bindtests.tmp
|
||||
|
||||
$GJS $srcdir/bindtests-manual.js 2>/dev/null
|
||||
|
||||
rm bindtests.tmp
|
||||
|
||||
Reference in New Issue
Block a user