From d0199162ba3426385535ff7bcef1955c8fc54e9b 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() (cherry picked from commit ffe292330337b4c78932cde808463752196f531f) Resolves: RHEL-75774 --- src/libsystemd/libsystemd.sym | 5 +++++ src/libsystemd/sd-varlink/sd-varlink.c | 19 +++++++++++++++++++ src/systemd/sd-varlink.h | 1 + 3 files changed, 25 insertions(+) diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index a76dc7e4ae..4dbe4e3c76 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -1059,3 +1059,8 @@ global: sd_device_monitor_get_timeout; sd_device_monitor_receive; } LIBSYSTEMD_256; + +LIBSYSTEMD_258 { +global: + sd_varlink_get_current_method; +} LIBSYSTEMD_257; diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index 7038cba5db..5f3b17199d 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 17cf8b7386..9401d417b2 100644 --- a/src/systemd/sd-varlink.h +++ b/src/systemd/sd-varlink.h @@ -176,6 +176,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 */