NAME |SYNOPSIS |DESCRIPTION |RETURN VALUE |NOTES |HISTORY |SEE ALSO |COLOPHON | |
SD_BUS_A...UMERATOR(3) sd_bus_add_node_enumeratorSD_BUS_A...UMERATOR(3)sd_bus_add_node_enumerator - Add a node enumerator for a D-Bus object path prefix
#include <systemd/sd-bus.h>typedef int (*sd_bus_node_enumerator_t)(sd_bus *bus,const char *prefix,void *userdata,char ***ret_nodes,sd_bus_error *ret_error);int sd_bus_add_node_enumerator(sd_bus *bus, sd_bus_slot **slot,const char *path,sd_bus_node_enumerator_tcallback,void *userdata);
sd_bus_add_node_enumerator()adds a D-Bus node enumerator for the given path prefix. The given callback is called to enumerate all the available objects with the given path prefix when required (e.g. whenorg.freedesktop.DBus.Introspectable.Introspectororg.freedesktop.DBus.ObjectManager.GetManagedObjectsare called on a D-Bus service managed by sd-bus).callback is called with the path and userdata pointer registered withsd_bus_add_node_enumerator(). When called, it should store all the child object paths of the given path prefix inret_nodes with a NULL terminator item. The callback should return a non-negative value on success. If an error occurs, it can either return a negative integer, setret_error to a non-empty error or do both. Any errors returned by the callback are encoded as D-Bus errors and sent back to the caller. Errors inret_error take priority over negative return values. Note that a node enumerator callback will only ever be called for a single path prefix and hence, for normal operation,prefix can be ignored. Also, a node enumerator is only used to enumerate the available child objects under a given prefix. To install a handler for a set of dynamic child objects, usesd_bus_add_fallback_vtable(3). Whensd_bus_add_node_enumerator()succeeds, a slot is created internally. If the output parameterslot isNULL, a "floating" slot object is created, seesd_bus_slot_set_floating(3). Otherwise, a pointer to the slot object is returned. In that case, the reference to the slot object should be dropped when the node enumerator is not needed anymore, seesd_bus_slot_unref(3).
On success,sd_bus_add_node_enumerator()returns a non-negative integer. On failure, it returns a negative errno-style error code.Errors Returned errors may indicate the following problems:-EINVAL One of the required parameters isNULLorpath is not a valid object path.-ENOPKG The bus cannot be resolved.-ECHILD The bus was created in a different process, library or module instance.-ENOMEM Memory allocation failed.
Functions described here are available as a shared library, which can be compiled against and linked to with thelibsystemd pkg-config(1) file. The code described here usesgetenv(3), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not callsetenv(3) from a parallel thread. It is recommended to only do calls tosetenv()from an early phase of the program when no other threads have been started.
sd_bus_node_enumerator_t()andsd_bus_add_node_enumerator()were added in version 221.
sd-bus(3),busctl(1),sd_bus_add_fallback_vtable(3),sd_bus_slot_unref(3)
This page is part of thesystemd (systemd system and service manager) project. Information about the project can be found at ⟨http://www.freedesktop.org/wiki/Software/systemd⟩. If you have a bug report for this manual page, see ⟨http://www.freedesktop.org/wiki/Software/systemd/#bugreports⟩. This page was obtained from the project's upstream Git repository ⟨https://github.com/systemd/systemd.git⟩ on 2025-08-11. (At that time, the date of the most recent commit that was found in the repository was 2025-08-11.) If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up-to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgsystemd 258~rc2SD_BUS_A...UMERATOR(3)Pages that refer to this page:sd-bus(3), systemd.directives(7), systemd.index(7)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |