diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index 726a6bce12..07553359df 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 d2ece7b2e6..cdfcb9935e 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 528c20e829..27e63a7fba 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);