From: Yu Watanabe Date: Sat, 4 Jan 2025 12:18:42 +0000 (+0900) Subject: sd-varlink: introduce sd_varlink_get_current_method() X-Git-Tag: v258-rc1~1713 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ffe292330337b4c78932cde808463752196f531f;p=thirdparty%2Fsystemd.git sd-varlink: introduce sd_varlink_get_current_method() --- diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index c310aa903fa..c953085ef9b 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 5e26f0f97e6..46dd3a62df3 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 223d02f4d7c..6329c4ee6a8 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 */