From 3c8db267892bbce5c82d5060cef993dd54dc6ed4 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Mon, 17 Feb 2003 09:59:23 +0000 Subject: 2003-02-17 Anders Carlsson * 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. --- dbus/dbus-errors.c | 5 +++-- dbus/dbus-sysdeps.c | 34 ++++++++++++++++++++++++++++------ dbus/dbus-sysdeps.h | 13 ++++++++++--- 3 files changed, 41 insertions(+), 11 deletions(-) (limited to 'dbus') 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 @@ -66,6 +66,19 @@ _dbus_abort (void) _exit (1); /* in case someone manages to ignore SIGABRT */ } +/** + * 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(). * @@ -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); -- cgit