pr " char **%s;\n" n;
| Bool n ->
pr " zend_bool %s;\n" n
- | Int n | Int64 n ->
+ | Int n | Int64 n | Pointer (_, n) ->
pr " long %s;\n" n
) args;
| OptString n -> "s!"
| StringList n | DeviceList n -> "a"
| Bool n -> "b"
- | Int n | Int64 n -> "l"
+ | Int n | Int64 n | Pointer (_, n) -> "l"
) args
) in
pr ", &z_%s" n
| Bool n ->
pr ", &%s" n
- | Int n | Int64 n ->
+ | Int n | Int64 n | Pointer (_, n) ->
pr ", &%s" n
) args;
List.iter (
pr " %s[c] = NULL;\n" n;
pr " }\n";
pr "\n"
- | Bool n | Int n | Int64 n -> ()
+ | Bool _ | Int _ | Int64 _ | Pointer _ -> ()
) args;
(* Optional arguments. *)
);
(* Return value. *)
- let error_code =
- match ret with
- | RErr -> pr " int r;\n"; "-1"
- | RBool _
- | RInt _ -> pr " int r;\n"; "-1"
- | RInt64 _ -> pr " int64_t r;\n"; "-1"
- | RConstString _ -> pr " const char *r;\n"; "NULL"
- | RConstOptString _ -> pr " const char *r;\n"; "NULL"
- | RString _ ->
- pr " char *r;\n"; "NULL"
- | RStringList _ ->
- pr " char **r;\n"; "NULL"
- | RStruct (_, typ) ->
- pr " struct guestfs_%s *r;\n" typ; "NULL"
- | RStructList (_, typ) ->
- pr " struct guestfs_%s_list *r;\n" typ; "NULL"
- | RHashtable _ ->
- pr " char **r;\n"; "NULL"
- | RBufferOut _ ->
- pr " char *r;\n";
- pr " size_t size;\n";
- "NULL" in
+ (match ret with
+ | RErr -> pr " int r;\n"
+ | RBool _
+ | RInt _ -> pr " int r;\n"
+ | RInt64 _ -> pr " int64_t r;\n"
+ | RConstString _ -> pr " const char *r;\n"
+ | RConstOptString _ -> pr " const char *r;\n"
+ | RString _ ->
+ pr " char *r;\n"
+ | RStringList _ ->
+ pr " char **r;\n"
+ | RStruct (_, typ) ->
+ pr " struct guestfs_%s *r;\n" typ
+ | RStructList (_, typ) ->
+ pr " struct guestfs_%s_list *r;\n" typ
+ | RHashtable _ ->
+ pr " char **r;\n"
+ | RBufferOut _ ->
+ pr " char *r;\n";
+ pr " size_t size;\n"
+ );
(* Call the function. *)
if optargs = [] then
pr " efree (%s);\n" n;
pr " }\n";
pr "\n"
- | Bool n | Int n | Int64 n -> ()
+ | Bool _ | Int _ | Int64 _ | Pointer _ -> ()
) args;
(* Check for errors. *)
- pr " if (r == %s) {\n" error_code;
- pr " RETURN_FALSE;\n";
- pr " }\n";
+ (match errcode_of_ret ret with
+ | `CannotReturnError -> ()
+ | `ErrorIsMinusOne ->
+ pr " if (r == -1) {\n";
+ pr " RETURN_FALSE;\n";
+ pr " }\n"
+ | `ErrorIsNULL ->
+ pr " if (r == NULL) {\n";
+ pr " RETURN_FALSE;\n";
+ pr " }\n"
+ );
pr "\n";
(* Convert the return value. *)