diff options
author | Richard Hughes <richard@hughsie.com> | 2007-07-24 11:37:20 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2007-07-24 11:37:20 +0000 |
commit | ab25c5369686273cbd53afb2ceb9f895012378b4 (patch) | |
tree | 173f4135ab378fb3fb7677dc306cb7a8c78f9dfc /dbus/dbus-spawn.c | |
parent | ee10721fdb3fb4cd8f2487a87a4e1c68e61ca0d6 (diff) |
2007-07-24 Richard Hughes <richard@hughsie.com>
* dbus/dbus-spawn.c: (read_data),
(_dbus_babysitter_get_child_exit_status):
* dbus/dbus-spawn.h:
Add a function so we can get access to the exit status of the launch
helper.
By providing the return code and not the error we can leave the
'what does this mean?' to the bus launch code and not include it in the
dbus directory.
Diffstat (limited to 'dbus/dbus-spawn.c')
-rw-r--r-- | dbus/dbus-spawn.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/dbus/dbus-spawn.c b/dbus/dbus-spawn.c index 15e3dec3..125aea7c 100644 --- a/dbus/dbus-spawn.c +++ b/dbus/dbus-spawn.c @@ -417,6 +417,7 @@ read_data (DBusBabysitter *sitter, { sitter->have_child_status = TRUE; sitter->status = arg; + sitter->errnum = WEXITSTATUS (sitter->status); _dbus_verbose ("recorded child status exited = %d signaled = %d exitstatus = %d termsig = %d\n", WIFEXITED (sitter->status), WIFSIGNALED (sitter->status), WEXITSTATUS (sitter->status), WTERMSIG (sitter->status)); @@ -623,6 +624,30 @@ _dbus_babysitter_get_child_exited (DBusBabysitter *sitter) } /** + * Gets the exit status of the child. We do this so implimentation specific + * detail is not cluttering up dbus, for example the system laucher code. + * + * @param sitter the babysitter + * @param status the returned status code + * @returns #FALSE on failure + */ +dbus_bool_t +_dbus_babysitter_get_child_exit_status (DBusBabysitter *sitter, int *status) +{ + if (!_dbus_babysitter_get_child_exited (sitter)) + _dbus_assert_not_reached ("Child has not exited"); + + if (sitter->errnum != WEXITSTATUS (sitter->status)) + _dbus_assert_not_reached ("Status is not exit!"); + + if (!sitter->have_child_status) + _dbus_assert_not_reached ("Not a child!"); + + *status = sitter->status; + return TRUE; +} + +/** * Sets the #DBusError with an explanation of why the spawned * child process exited (on a signal, or whatever). If * the child process has not exited, does nothing (error |