From ffe292330337b4c78932cde808463752196f531f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 4 Jan 2025 21:18:42 +0900 Subject: [PATCH] sd-varlink: introduce sd_varlink_get_current_method() --- src/libsystemd/libsystemd.sym | 1 + src/libsystemd/sd-varlink/sd-varlink.c | 19 +++++++++++++++++++ src/systemd/sd-varlink.h | 1 + 3 files changed, 21 insertions(+) diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index c310aa903f..c953085ef9 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -1065,6 +1065,7 @@ global: sd_device_enumerator_add_all_parents; sd_json_variant_type_from_string; sd_json_variant_type_to_string; + sd_varlink_get_current_method; sd_varlink_get_input_fd; sd_varlink_get_output_fd; sd_varlink_reset_fds; diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index 5e26f0f97e..46dd3a62df 100644 --- a/src/libsystemd/sd-varlink/sd-varlink.c +++ b/src/libsystemd/sd-varlink/sd-varlink.c @@ -1542,6 +1542,25 @@ _public_ int sd_varlink_dispatch_again(sd_varlink *v) { return 0; } +_public_ int sd_varlink_get_current_method(sd_varlink *v, const char **ret) { + assert_return(v, -EINVAL); + + if (!v->current) + return -ENODATA; + + sd_json_variant *p = sd_json_variant_by_key(v->current, "method"); + if (!p) + return -ENODATA; + + const char *s = sd_json_variant_string(p); + if (!s) + return -ENODATA; + + if (ret) + *ret = s; + return 0; +} + _public_ int sd_varlink_get_current_parameters(sd_varlink *v, sd_json_variant **ret) { sd_json_variant *p; diff --git a/src/systemd/sd-varlink.h b/src/systemd/sd-varlink.h index 223d02f4d7..6329c4ee6a 100644 --- a/src/systemd/sd-varlink.h +++ b/src/systemd/sd-varlink.h @@ -178,6 +178,7 @@ int sd_varlink_notifyb(sd_varlink *v, ...); int sd_varlink_dispatch_again(sd_varlink *v); /* Get the currently processed incoming message */ +int sd_varlink_get_current_method(sd_varlink *v, const char **ret); int sd_varlink_get_current_parameters(sd_varlink *v, sd_json_variant **ret); /* Parsing incoming data via json_dispatch() and generate a nice error on parse errors */