summaryrefslogtreecommitdiffstats
path: root/bus/services.c
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@codefactory.se>2003-01-24 23:51:59 +0000
committerAnders Carlsson <andersca@codefactory.se>2003-01-24 23:51:59 +0000
commita16e83f45d33ae5f3bd5966416c57c8ad4448ae8 (patch)
tree255683e91ebf0f19bd737bf66161bf64c05e8f04 /bus/services.c
parentdc6a61a15b2d9cdc6504753fa9eb0a718f99d6d8 (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.c39
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;
+}