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 /dbus | |
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 'dbus')
-rw-r--r-- | dbus/dbus-errors.c | 5 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.c | 34 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.h | 13 |
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); |