return sd_varlink_reply(link, ret);
}
+static int method_fail_with_errno(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
+ int r;
+
+ r = sd_varlink_dispatch(link, parameters, NULL, NULL);
+ if (r != 0)
+ return r;
+
+ return sd_varlink_error_errno(link, EHWPOISON);
+}
+
static int method_done(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
if (++n_done == 2)
ASSERT_STREQ(sd_json_variant_string(sd_json_variant_by_key(o, "method")), "io.test.IDontExist");
ASSERT_STREQ(e, SD_VARLINK_ERROR_METHOD_NOT_FOUND);
+ ASSERT_OK(sd_varlink_call(c, "io.test.FailWithErrno", NULL, &o, &e));
+ ASSERT_ERROR(sd_varlink_error_to_errno(e, o), EHWPOISON);
flood_test(arg);
assert_se(sd_varlink_send(c, "io.test.Done", NULL) >= 0);
assert_se(sd_varlink_server_bind_method(s, "io.test.PassFD", method_passfd) >= 0);
assert_se(sd_varlink_server_bind_method(s, "io.test.DoSomething", method_something) >= 0);
assert_se(sd_varlink_server_bind_method(s, "io.test.DoSomethingMore", method_something_more) >= 0);
+ assert_se(sd_varlink_server_bind_method(s, "io.test.FailWithErrno", method_fail_with_errno) >= 0);
assert_se(sd_varlink_server_bind_method(s, "io.test.Done", method_done) >= 0);
assert_se(sd_varlink_server_bind_connect(s, on_connect) >= 0);
assert_se(sd_varlink_server_listen_address(s, sp, 0600) >= 0);