From: Lennart Poettering Date: Fri, 14 Feb 2025 13:33:48 +0000 (+0100) Subject: sd-varlink: add new sd_varlink_get_n_fds() helper X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bf1e5d5a0f06ba48b10ef2df1f3066fd164fca56;p=thirdparty%2Fsystemd.git sd-varlink: add new sd_varlink_get_n_fds() helper This new call returns how many fds have been associated with the current incoming message. --- diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index 726a6bce12a..07553359df9 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -1069,6 +1069,7 @@ global: sd_varlink_get_current_method; sd_varlink_get_description; sd_varlink_get_input_fd; + sd_varlink_get_n_fds; sd_varlink_get_output_fd; sd_varlink_reset_fds; sd_varlink_server_listen_name; diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index d2ece7b2e6d..cdfcb9935e8 100644 --- a/src/libsystemd/sd-varlink/sd-varlink.c +++ b/src/libsystemd/sd-varlink/sd-varlink.c @@ -3183,6 +3183,15 @@ _public_ int sd_varlink_take_fd(sd_varlink *v, size_t i) { return TAKE_FD(v->input_fds[i]); } +_public_ int sd_varlink_get_n_fds(sd_varlink *v) { + assert_return(v, -EINVAL); + + if (!v->allow_fd_passing_input) + return -EPERM; + + return (int) v->n_input_fds; +} + static int verify_unix_socket(sd_varlink *v) { assert(v); diff --git a/src/systemd/sd-varlink.h b/src/systemd/sd-varlink.h index 528c20e8295..27e63a7fba1 100644 --- a/src/systemd/sd-varlink.h +++ b/src/systemd/sd-varlink.h @@ -195,6 +195,7 @@ int sd_varlink_reset_fds(sd_varlink *v); int sd_varlink_peek_fd(sd_varlink *v, size_t i); int sd_varlink_peek_dup_fd(sd_varlink *v, size_t i); int sd_varlink_take_fd(sd_varlink *v, size_t i); +int sd_varlink_get_n_fds(sd_varlink *v); int sd_varlink_set_allow_fd_passing_input(sd_varlink *v, int b); int sd_varlink_set_allow_fd_passing_output(sd_varlink *v, int b);