summaryrefslogtreecommitdiffstats
path: root/dbus
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 /dbus
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 'dbus')
-rw-r--r--dbus/dbus-errors.c5
-rw-r--r--dbus/dbus-sysdeps.c34
-rw-r--r--dbus/dbus-sysdeps.h13
3 files changed, 41 insertions, 11 deletions
diff --git a/dbus/dbus-errors.c b/dbus/dbus-errors.c
index dfc52fb3..92cca03c 100644
--- a/dbus/dbus-errors.c
+++ b/dbus/dbus-errors.c
@@ -238,13 +238,14 @@ dbus_set_error (DBusError *error,
va_start (args, format);
- va_copy (args2, args);
-
/* Measure the message length */
message_length = vsnprintf (&c, 1,format, args) + 1;
message = dbus_malloc (message_length);
+ va_end (args);
+
+ va_start (args, format);
vsprintf (message, format, args2);
if (!message)
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c
index 83b1f044..1308a6ba 100644
--- a/dbus/dbus-sysdeps.c
+++ b/dbus/dbus-sysdeps.c
@@ -67,6 +67,19 @@ _dbus_abort (void)
}
/**
+ * Wrapper for setenv().
+ *
+ * @param varname name of environment variable
+ * @param value value of environment variable
+ * @returns #TRUE on success.
+ */
+dbus_bool_t
+_dbus_setenv (const char *varname, const char *value)
+{
+ return (setenv (varname, value, TRUE) == 0);
+}
+
+/**
* Wrapper for getenv().
*
* @param varname name of environment variable
@@ -1564,12 +1577,18 @@ read_ints (int fd,
}
static void
-do_exec (int child_err_report_fd,
- char **argv)
+do_exec (int child_err_report_fd,
+ char **argv,
+ DBusSpawnChildSetupFunc child_setup,
+ void *user_data)
{
#ifdef DBUS_BUILD_TESTS
int i, max_open;
-
+#endif
+
+ if (child_setup)
+ (* child_setup) (user_data);
+#ifdef DBUS_BUILD_TESTS
max_open = sysconf (_SC_OPEN_MAX);
@@ -1593,8 +1612,10 @@ do_exec (int child_err_report_fd,
}
dbus_bool_t
-_dbus_spawn_async (char **argv,
- DBusError *error)
+_dbus_spawn_async (char **argv,
+ DBusSpawnChildSetupFunc child_setup,
+ void *user_data,
+ DBusError *error)
{
int pid = -1, grandchild_pid;
int child_err_report_pipe[2] = { -1, -1 };
@@ -1643,7 +1664,8 @@ _dbus_spawn_async (char **argv,
else if (grandchild_pid == 0)
{
do_exec (child_err_report_pipe[1],
- argv);
+ argv,
+ child_setup, user_data);
}
else
{
diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h
index 42697a00..50da679c 100644
--- a/dbus/dbus-sysdeps.h
+++ b/dbus/dbus-sysdeps.h
@@ -49,7 +49,8 @@ DBUS_BEGIN_DECLS;
void _dbus_abort (void);
const char* _dbus_getenv (const char *varname);
-
+dbus_bool_t _dbus_setenv (const char *varname,
+ const char *value);
int _dbus_read (int fd,
DBusString *buffer,
@@ -148,8 +149,14 @@ dbus_bool_t _dbus_generate_random_bytes (DBusString *str,
int n_bytes);
const char *_dbus_errno_to_string (int errnum);
-dbus_bool_t _dbus_spawn_async (char **argv,
- DBusError *error);
+
+typedef void (* DBusSpawnChildSetupFunc) (void *user_data);
+
+dbus_bool_t _dbus_spawn_async (char **argv,
+ DBusSpawnChildSetupFunc child_setup,
+ void *user_data,
+ DBusError *error);
+
void _dbus_disable_sigpipe (void);