summaryrefslogtreecommitdiffstats
path: root/bus
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@codefactory.se>2003-02-17 09:59:23 +0000
committerAnders Carlsson <andersca@codefactory.se>2003-02-17 09:59:23 +0000
commit3c8db267892bbce5c82d5060cef993dd54dc6ed4 (patch)
tree9560edcebc5bf79b4550611a67505b7677543418 /bus
parent8faf99b118daf0040a58981cdf24a344ff2578ca (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.c18
-rw-r--r--bus/activation.h3
-rw-r--r--bus/main.c19
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);
diff --git a/bus/main.c b/bus/main.c
index 68e3a7b9..fdb6462e 100644
--- a/bus/main.c
+++ b/bus/main.c
@@ -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);