summaryrefslogtreecommitdiffstats
path: root/generator/generator_capitests.ml
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-03-07 19:28:30 +0000
committerRichard W.M. Jones <rjones@redhat.com>2011-03-07 19:28:30 +0000
commit8037da06feea097716ce700f38c0eac0d5411a7c (patch)
tree482fa34741bcdf650948eebb99903943137f4e19 /generator/generator_capitests.ml
parent7c721e4fd674c409b3eee60fe237d480afa1c5e2 (diff)
downloadlibguestfs-8037da06feea097716ce700f38c0eac0d5411a7c.tar.gz
libguestfs-8037da06feea097716ce700f38c0eac0d5411a7c.tar.xz
libguestfs-8037da06feea097716ce700f38c0eac0d5411a7c.zip
generator: Introduce error code (errcode) concept.
There was a lot of repeated code to map return types (eg. RErr) to error cases (eg. -1 or NULL). This commit introduces an error code type and two functions to map return types to error codes and error codes to strings.
Diffstat (limited to 'generator/generator_capitests.ml')
-rw-r--r--generator/generator_capitests.ml56
1 files changed, 32 insertions, 24 deletions
diff --git a/generator/generator_capitests.ml b/generator/generator_capitests.ml
index 5b40cc2e..196b1fb8 100644
--- a/generator/generator_capitests.ml
+++ b/generator/generator_capitests.ml
@@ -792,25 +792,23 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd =
) optargs;
);
- let error_code =
- match style_ret with
- | RErr | RInt _ | RBool _ -> pr " int r;\n"; "-1"
- | RInt64 _ -> pr " int64_t r;\n"; "-1"
- | RConstString _ | RConstOptString _ ->
- pr " const char *r;\n"; "NULL"
- | RString _ -> pr " char *r;\n"; "NULL"
- | RStringList _ | RHashtable _ ->
- pr " char **r;\n";
- pr " size_t i;\n";
- "NULL"
- | RStruct (_, typ) ->
- pr " struct guestfs_%s *r;\n" typ; "NULL"
- | RStructList (_, typ) ->
- pr " struct guestfs_%s_list *r;\n" typ; "NULL"
- | RBufferOut _ ->
- pr " char *r;\n";
- pr " size_t size;\n";
- "NULL" in
+ (match style_ret with
+ | RErr | RInt _ | RBool _ -> pr " int r;\n"
+ | RInt64 _ -> pr " int64_t r;\n"
+ | RConstString _ | RConstOptString _ ->
+ pr " const char *r;\n"
+ | RString _ -> pr " char *r;\n"
+ | RStringList _ | RHashtable _ ->
+ pr " char **r;\n";
+ pr " size_t i;\n"
+ | RStruct (_, typ) ->
+ pr " struct guestfs_%s *r;\n" typ
+ | RStructList (_, typ) ->
+ pr " struct guestfs_%s_list *r;\n" typ
+ | RBufferOut _ ->
+ pr " char *r;\n";
+ pr " size_t size;\n"
+ );
pr " suppress_error = %d;\n" (if expect_error then 1 else 0);
if optargs = [] then
@@ -861,11 +859,21 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd =
pr ");\n";
- if not expect_error then
- pr " if (r == %s)\n" error_code
- else
- pr " if (r != %s)\n" error_code;
- pr " return -1;\n";
+ (match errcode_of_ret style_ret, expect_error with
+ | `CannotReturnError, _ -> ()
+ | `ErrorIsMinusOne, false ->
+ pr " if (r == -1)\n";
+ pr " return -1;\n";
+ | `ErrorIsMinusOne, true ->
+ pr " if (r != -1)\n";
+ pr " return -1;\n";
+ | `ErrorIsNULL, false ->
+ pr " if (r == NULL)\n";
+ pr " return -1;\n";
+ | `ErrorIsNULL, true ->
+ pr " if (r != NULL)\n";
+ pr " return -1;\n";
+ );
(* Insert the test code. *)
(match test with