diff options
author | Anders Carlsson <andersca@codefactory.se> | 2003-01-24 23:51:59 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@codefactory.se> | 2003-01-24 23:51:59 +0000 |
commit | a16e83f45d33ae5f3bd5966416c57c8ad4448ae8 (patch) | |
tree | 255683e91ebf0f19bd737bf66161bf64c05e8f04 /bus/services.c | |
parent | dc6a61a15b2d9cdc6504753fa9eb0a718f99d6d8 (diff) |
2003-01-25 Anders Carlsson <andersca@codefactory.se>
* 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.
Diffstat (limited to 'bus/services.c')
-rw-r--r-- | bus/services.c | 39 |
1 files changed, 39 insertions, 0 deletions
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; +} |