varlink: introduce varlink_call_and_log() which calls and then logs an error
As it turns out we do this in a similar way at various times (and sometimes incorrectly), hence add a common implementation to share the code and fix the incorrect behaviour.
This commit is contained in:
@@ -2259,6 +2259,7 @@ int varlink_callb_ap(
|
||||
int r;
|
||||
|
||||
assert_return(v, -EINVAL);
|
||||
assert_return(method, -EINVAL);
|
||||
|
||||
r = json_buildv(¶meters, ap);
|
||||
if (r < 0)
|
||||
@@ -2267,6 +2268,54 @@ int varlink_callb_ap(
|
||||
return varlink_call_full(v, method, parameters, ret_parameters, ret_error_id, ret_flags);
|
||||
}
|
||||
|
||||
int varlink_call_and_log(
|
||||
Varlink *v,
|
||||
const char *method,
|
||||
JsonVariant *parameters,
|
||||
JsonVariant **ret_parameters) {
|
||||
|
||||
JsonVariant *reply = NULL;
|
||||
const char *error_id = NULL;
|
||||
int r;
|
||||
|
||||
assert_return(v, -EINVAL);
|
||||
assert_return(method, -EINVAL);
|
||||
|
||||
r = varlink_call(v, method, parameters, &reply, &error_id);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to issue %s() varlink call: %m", method);
|
||||
if (error_id)
|
||||
return log_error_errno(varlink_error_to_errno(error_id, reply),
|
||||
"Failed to issue %s() varlink call: %s", method, error_id);
|
||||
|
||||
if (ret_parameters)
|
||||
*ret_parameters = TAKE_PTR(reply);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int varlink_callb_and_log(
|
||||
Varlink *v,
|
||||
const char *method,
|
||||
JsonVariant **ret_parameters,
|
||||
...) {
|
||||
|
||||
_cleanup_(json_variant_unrefp) JsonVariant *parameters = NULL;
|
||||
va_list ap;
|
||||
int r;
|
||||
|
||||
assert_return(v, -EINVAL);
|
||||
assert_return(method, -EINVAL);
|
||||
|
||||
va_start(ap, ret_parameters);
|
||||
r = json_buildv(¶meters, ap);
|
||||
va_end(ap);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to build JSON message: %m");
|
||||
|
||||
return varlink_call_and_log(v, method, parameters, ret_parameters);
|
||||
}
|
||||
|
||||
static void varlink_collect_context_free(VarlinkCollectContext *cc) {
|
||||
assert(cc);
|
||||
|
||||
|
||||
@@ -92,6 +92,8 @@ int varlink_call_full(Varlink *v, const char *method, JsonVariant *parameters, J
|
||||
static inline int varlink_call(Varlink *v, const char *method, JsonVariant *parameters, JsonVariant **ret_parameters, const char **ret_error_id) {
|
||||
return varlink_call_full(v, method, parameters, ret_parameters, ret_error_id, NULL);
|
||||
}
|
||||
int varlink_call_and_log(Varlink *v, const char *method, JsonVariant *parameters, JsonVariant **ret_parameters);
|
||||
|
||||
int varlink_callb_ap(Varlink *v, const char *method, JsonVariant **ret_parameters, const char **ret_error_id, VarlinkReplyFlags *ret_flags, va_list ap);
|
||||
static inline int varlink_callb_full(Varlink *v, const char *method, JsonVariant **ret_parameters, const char **ret_error_id, VarlinkReplyFlags *ret_flags, ...) {
|
||||
va_list ap;
|
||||
@@ -111,6 +113,7 @@ static inline int varlink_callb(Varlink *v, const char *method, JsonVariant **re
|
||||
va_end(ap);
|
||||
return r;
|
||||
}
|
||||
int varlink_callb_and_log(Varlink *v, const char *method, JsonVariant **ret_parameters, ...);
|
||||
|
||||
/* Send method call and begin collecting all 'more' replies into an array, finishing when a final reply is sent */
|
||||
int varlink_collect(Varlink *v, const char *method, JsonVariant *parameters, JsonVariant **ret_parameters, const char **ret_error_id, VarlinkReplyFlags *ret_flags);
|
||||
|
||||
Reference in New Issue
Block a user