From a16e83f45d33ae5f3bd5966416c57c8ad4448ae8 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Fri, 24 Jan 2003 23:51:59 +0000 Subject: 2003-01-25 Anders Carlsson * bus/connection.c: (bus_connection_foreach): * bus/connection.h: Add new bus_connection_foreach function. * bus/driver.c: (send_one_message), (bus_driver_broadcast_message): Add function that broadcasts a message to all clients. (bus_driver_send_service_created), (bus_driver_handle_hello), (bus_driver_send_welcome_message), (bus_driver_handle_list_services), (bus_driver_message_handler): Implement functions that take care of listing services, and notifying clients when new services are created. * bus/services.c: (bus_services_list): * bus/services.h: Add new function that returns an array of strings with the currently registered services. * glib/dbus-glib.h: * glib/dbus-gmain.c: Update copyright year. --- bus/services.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'bus/services.c') diff --git a/bus/services.c b/bus/services.c index c07b20fd..0be56e75 100644 --- a/bus/services.c +++ b/bus/services.c @@ -163,3 +163,42 @@ bus_service_foreach (BusServiceForeachFunction function, (* function) (service, data); } } + +char ** +bus_services_list (int *array_len) +{ + int i, j, len; + char **retval; + DBusHashIter iter; + + len = _dbus_hash_table_get_n_entries (service_hash); + retval = dbus_new (char *, len); + + if (retval == NULL) + return NULL; + + _dbus_hash_iter_init (service_hash, &iter); + i = 0; + while (_dbus_hash_iter_next (&iter)) + { + BusService *service = _dbus_hash_iter_get_value (&iter); + + retval[i] = _dbus_strdup (service->name); + if (retval[i] == NULL) + goto error; + + i++; + } + + if (array_len) + *array_len = len; + + return retval; + + error: + for (j = 0; j < i; j++) + dbus_free (retval[i]); + dbus_free (retval); + + return NULL; +} -- cgit