From: Lennart Poettering Date: Sun, 16 Aug 2020 11:45:25 +0000 (+0200) Subject: varlink: add helper for generating errno errors X-Git-Tag: v247-rc1~361^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7466e94f13ae690be939a18eb1604f6f0ee8100a;p=thirdparty%2Fsystemd.git varlink: add helper for generating errno errors --- diff --git a/src/shared/varlink.c b/src/shared/varlink.c index be3559dc103..e2b4bb623d1 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -862,7 +862,7 @@ static int varlink_dispatch_method(Varlink *v) { /* We got an error back from the callback. Propagate it to the client if the method call remains unanswered. */ if (!FLAGS_SET(flags, VARLINK_METHOD_ONEWAY)) { - r = varlink_errorb(v, VARLINK_ERROR_SYSTEM, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("errno", JSON_BUILD_INTEGER(-r)))); + r = varlink_error_errno(v, r); if (r < 0) return r; } @@ -1659,6 +1659,13 @@ int varlink_error_invalid_parameter(Varlink *v, JsonVariant *parameters) { return -EINVAL; } +int varlink_error_errno(Varlink *v, int error) { + return varlink_errorb( + v, + VARLINK_ERROR_SYSTEM, + JSON_BUILD_OBJECT(JSON_BUILD_PAIR("errno", JSON_BUILD_INTEGER(abs(error))))); +} + int varlink_notify(Varlink *v, JsonVariant *parameters) { _cleanup_(json_variant_unrefp) JsonVariant *m = NULL; int r; diff --git a/src/shared/varlink.h b/src/shared/varlink.h index 7440f2ca44d..06a34b480d4 100644 --- a/src/shared/varlink.h +++ b/src/shared/varlink.h @@ -100,6 +100,7 @@ int varlink_replyb(Varlink *v, ...); int varlink_error(Varlink *v, const char *error_id, JsonVariant *parameters); int varlink_errorb(Varlink *v, const char *error_id, ...); int varlink_error_invalid_parameter(Varlink *v, JsonVariant *parameters); +int varlink_error_errno(Varlink *v, int error); /* Enqueue a "more" reply */ int varlink_notify(Varlink *v, JsonVariant *parameters);