X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=generator%2Fgenerator_bindtests.ml;h=859f189e313ae829cd334981995dd5ec2a4b7d23;hb=aa67ea2b9b800305a00615f3a463cdd46eae9181;hp=66a5d551663b699ccf218be2602dff7f10d5181c;hpb=04d8209077d2227eb1d42695ba71147f78987050;p=libguestfs.git diff --git a/generator/generator_bindtests.ml b/generator/generator_bindtests.ml index 66a5d55..859f189 100644 --- a/generator/generator_bindtests.ml +++ b/generator/generator_bindtests.ml @@ -43,10 +43,6 @@ let rec generate_bindtests () = #include \"guestfs-internal-actions.h\" #include \"guestfs_protocol.h\" -#define error guestfs_error -#define safe_calloc guestfs_safe_calloc -#define safe_malloc guestfs_safe_malloc - static void print_strings (char *const *argv) { @@ -69,7 +65,7 @@ print_strings (char *const *argv) | test0 :: tests -> test0, tests in let () = - let (name, style, _, _, _, _, _) = test0 in + let (name, (ret, args, _ as style), _, _, _, _, _) = test0 in generate_prototype ~extern:false ~semicolon:false ~newline:true ~handle:"g" ~prefix:"guestfs__" name style; pr "{\n"; @@ -93,7 +89,8 @@ print_strings (char *const *argv) | Bool n -> pr " printf (\"%%s\\n\", %s ? \"true\" : \"false\");\n" n | Int n -> pr " printf (\"%%d\\n\", %s);\n" n | Int64 n -> pr " printf (\"%%\" PRIi64 \"\\n\", %s);\n" n - ) (snd style); + | Pointer _ -> assert false + ) args; pr " /* Java changes stdout line buffering so we need this: */\n"; pr " fflush (stdout);\n"; pr " return 0;\n"; @@ -101,22 +98,28 @@ print_strings (char *const *argv) pr "\n" in List.iter ( - fun (name, style, _, _, _, _, _) -> + fun (name, (ret, args, _ as style), _, _, _, _, _) -> if String.sub name (String.length name - 3) 3 <> "err" then ( pr "/* Test normal return. */\n"; generate_prototype ~extern:false ~semicolon:false ~newline:true ~handle:"g" ~prefix:"guestfs__" name style; pr "{\n"; - (match fst style with + (match ret with | RErr -> pr " return 0;\n" | RInt _ -> pr " int r;\n"; - pr " sscanf (val, \"%%d\", &r);\n"; + pr " if (sscanf (val, \"%%d\", &r) != 1) {\n"; + pr " error (g, \"%%s: expecting int argument\", \"%s\");\n" name; + pr " return -1;\n"; + pr " }\n"; pr " return r;\n" | RInt64 _ -> pr " int64_t r;\n"; - pr " sscanf (val, \"%%\" SCNi64, &r);\n"; + pr " if (sscanf (val, \"%%\" SCNi64, &r) != 1) {\n"; + pr " error (g, \"%%s: expecting int64 argument\", \"%s\");\n" name; + pr " return -1;\n"; + pr " }\n"; pr " return r;\n" | RBool _ -> pr " return STREQ (val, \"true\");\n" @@ -132,7 +135,10 @@ print_strings (char *const *argv) | RStringList _ -> pr " char **strs;\n"; pr " int n, i;\n"; - pr " sscanf (val, \"%%d\", &n);\n"; + pr " if (sscanf (val, \"%%d\", &n) != 1) {\n"; + pr " error (g, \"%%s: expecting int argument\", \"%s\");\n" name; + pr " return NULL;\n"; + pr " }\n"; pr " strs = safe_malloc (g, (n+1) * sizeof (char *));\n"; pr " for (i = 0; i < n; ++i) {\n"; pr " strs[i] = safe_malloc (g, 16);\n"; @@ -146,14 +152,22 @@ print_strings (char *const *argv) pr " return r;\n" | RStructList (_, typ) -> pr " struct guestfs_%s_list *r;\n" typ; + pr " uint32_t len;\n"; + pr " if (sscanf (val, \"%%\" SCNu32, &len) != 1) {\n"; + pr " error (g, \"%%s: expecting uint32 argument\", \"%s\");\n" name; + pr " return NULL;\n"; + pr " }\n"; pr " r = safe_calloc (g, sizeof *r, 1);\n"; - pr " sscanf (val, \"%%d\", &r->len);\n"; + pr " r->len = len;\n"; pr " r->val = safe_calloc (g, r->len, sizeof *r->val);\n"; pr " return r;\n" | RHashtable _ -> pr " char **strs;\n"; pr " int n, i;\n"; - pr " sscanf (val, \"%%d\", &n);\n"; + pr " if (sscanf (val, \"%%d\", &n) != -1) {\n"; + pr " error (g, \"%%s: expecting int argument\", \"%s\");\n" name; + pr " return NULL;\n"; + pr " }\n"; pr " strs = safe_malloc (g, (n*2+1) * sizeof (*strs));\n"; pr " for (i = 0; i < n; ++i) {\n"; pr " strs[i*2] = safe_malloc (g, 16);\n"; @@ -174,7 +188,7 @@ print_strings (char *const *argv) ~handle:"g" ~prefix:"guestfs__" name style; pr "{\n"; pr " error (g, \"error\");\n"; - (match fst style with + (match ret with | RErr | RInt _ | RInt64 _ | RBool _ -> pr " return -1;\n" | RConstString _ | RConstOptString _