diff options
author | Anders Carlsson <andersca@codefactory.se> | 2003-02-17 09:59:23 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@codefactory.se> | 2003-02-17 09:59:23 +0000 |
commit | 3c8db267892bbce5c82d5060cef993dd54dc6ed4 (patch) | |
tree | 9560edcebc5bf79b4550611a67505b7677543418 /bus | |
parent | 8faf99b118daf0040a58981cdf24a344ff2578ca (diff) |
2003-02-17 Anders Carlsson <andersca@codefactory.se>
* bus/activation.c: (bus_activation_init), (child_setup),
(bus_activation_activate_service):
* bus/activation.h:
* bus/main.c: (main):
Set DBUS_ADDRESS environment variable.
* dbus/dbus-errors.c: (dbus_set_error):
Don't use va_copy since that's a C99 feature.
* dbus/dbus-sysdeps.c: (_dbus_setenv), (do_exec),
(_dbus_spawn_async):
* dbus/dbus-sysdeps.h:
Add child_setup_func to _dbus_spawn_async.
* doc/dbus-specification.sgml:
Update specification.
* test/spawn-test.c: (setup_func), (main):
Fix test.
Diffstat (limited to 'bus')
-rw-r--r-- | bus/activation.c | 18 | ||||
-rw-r--r-- | bus/activation.h | 3 | ||||
-rw-r--r-- | bus/main.c | 19 |
3 files changed, 28 insertions, 12 deletions
diff --git a/bus/activation.c b/bus/activation.c index b4acd0f3..b5cec44a 100644 --- a/bus/activation.c +++ b/bus/activation.c @@ -34,6 +34,7 @@ #define DBUS_SERVICE_EXEC "Exec" static DBusHashTable *activation_entries = NULL; +static char *server_address = NULL; typedef struct { @@ -174,10 +175,14 @@ load_directory (const char *directory) void -bus_activation_init (const char **directories) +bus_activation_init (const char *address, + const char **directories) { int i; + /* FIXME: We should split up the server addresses. */ + BUS_HANDLE_OOM (server_address = _dbus_strdup (address)); + BUS_HANDLE_OOM (activation_entries = _dbus_hash_table_new (DBUS_HASH_STRING, NULL, (DBusFreeFunction)bus_activation_entry_free)); @@ -191,6 +196,13 @@ bus_activation_init (const char **directories) } } +static void +child_setup (void *data) +{ + /* FIXME: Check return value in case of OOM */ + _dbus_setenv ("DBUS_ADDRESS", server_address); +} + dbus_bool_t bus_activation_activate_service (const char *service_name, DBusError *error) @@ -212,7 +224,9 @@ bus_activation_activate_service (const char *service_name, argv[0] = entry->exec; argv[1] = NULL; - if (!_dbus_spawn_async (argv, error)) + if (!_dbus_spawn_async (argv, + child_setup, NULL, + error)) return FALSE; return TRUE; diff --git a/bus/activation.h b/bus/activation.h index 15260f01..5f29871e 100644 --- a/bus/activation.h +++ b/bus/activation.h @@ -26,7 +26,8 @@ #include <dbus/dbus.h> -void bus_activation_init (const char **paths); +void bus_activation_init (const char *address, + const char **paths); dbus_bool_t bus_activation_activate_service (const char *service_name, DBusError *error); @@ -82,6 +82,15 @@ main (int argc, char **argv) return 1; } + + server = dbus_server_listen (argv[1], &result); + if (server == NULL) + { + _dbus_warn ("Failed to start server on %s: %s\n", + argv[1], dbus_result_to_string (result)); + return 1; + } + if (argc < 3) { _dbus_warn ("No service location given, not activating activation\n"); @@ -90,15 +99,7 @@ main (int argc, char **argv) { char *paths[] = { argv[2], NULL }; - bus_activation_init (paths); - } - - server = dbus_server_listen (argv[1], &result); - if (server == NULL) - { - _dbus_warn ("Failed to start server on %s: %s\n", - argv[1], dbus_result_to_string (result)); - return 1; + bus_activation_init (argv[1], paths); } setup_server (server); |