diff options
author | John (J5) Palmieri <johnp@redhat.com> | 2006-07-14 01:17:59 +0000 |
---|---|---|
committer | John (J5) Palmieri <johnp@redhat.com> | 2006-07-14 01:17:59 +0000 |
commit | 7628b541258d906e27e2000a402ed2d02383479c (patch) | |
tree | a422ce5ba507acda462b26b09a79b751c4944841 /bus/activation.c | |
parent | a3e4cf7b3a37b18df1a1cc0aa1011ebb5be0c585 (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.c | 45 |
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> |