summaryrefslogtreecommitdiffstats
path: root/bus/activation.c
diff options
context:
space:
mode:
authorJohn (J5) Palmieri <johnp@redhat.com>2006-07-14 01:17:59 +0000
committerJohn (J5) Palmieri <johnp@redhat.com>2006-07-14 01:17:59 +0000
commit7628b541258d906e27e2000a402ed2d02383479c (patch)
treea422ce5ba507acda462b26b09a79b751c4944841 /bus/activation.c
parenta3e4cf7b3a37b18df1a1cc0aa1011ebb5be0c585 (diff)
* bus/activation.[ch] (bus_activation_list_services): new function to
get the list of services that can be activated * bus/dispatch.c: test coverage for the new bus method ListActivatableNames * bus/driver.c: new bus method ListActivatableNames to get the list of services that can be activated * doc/dbus-specification.xml: ListActivatableNames method documentation
Diffstat (limited to 'bus/activation.c')
-rw-r--r--bus/activation.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/bus/activation.c b/bus/activation.c
index 1cdedb9f..40221938 100644
--- a/bus/activation.c
+++ b/bus/activation.c
@@ -1565,6 +1565,51 @@ bus_activation_activate_service (BusActivation *activation,
return TRUE;
}
+dbus_bool_t
+bus_activation_list_services (BusActivation *activation,
+ char ***listp,
+ int *array_len)
+{
+ int i, j, len;
+ char **retval;
+ DBusHashIter iter;
+
+ len = _dbus_hash_table_get_n_entries (activation->entries);
+ retval = dbus_new (char *, len + 1);
+
+ if (retval == NULL)
+ return FALSE;
+
+ _dbus_hash_iter_init (activation->entries, &iter);
+ i = 0;
+ while (_dbus_hash_iter_next (&iter))
+ {
+ BusActivationEntry *entry = _dbus_hash_iter_get_value (&iter);
+
+ retval[i] = _dbus_strdup (entry->name);
+ if (retval[i] == NULL)
+ goto error;
+
+ i++;
+ }
+
+ retval[i] = NULL;
+
+ if (array_len)
+ *array_len = len;
+
+ *listp = retval;
+ return TRUE;
+
+ error:
+ for (j = 0; j < i; j++)
+ dbus_free (retval[i]);
+ dbus_free (retval);
+
+ return FALSE;
+}
+
+
#ifdef DBUS_BUILD_TESTS
#include <stdio.h>