summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2007-07-24 11:37:20 +0000
committerRichard Hughes <richard@hughsie.com>2007-07-24 11:37:20 +0000
commitab25c5369686273cbd53afb2ceb9f895012378b4 (patch)
tree173f4135ab378fb3fb7677dc306cb7a8c78f9dfc
parentee10721fdb3fb4cd8f2487a87a4e1c68e61ca0d6 (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.
-rw-r--r--ChangeLog11
-rw-r--r--dbus/dbus-spawn.c25
-rw-r--r--dbus/dbus-spawn.h2
3 files changed, 38 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 9f0d9bbb..8c9a48b9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
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.
+
+2007-07-24 Richard Hughes <richard@hughsie.com>
+
* bus/activation-exit-codes.h:
Add defines which specify the output codes of the launch helper.
We have to use exit codes as this is the only way we can return failure
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
diff --git a/dbus/dbus-spawn.h b/dbus/dbus-spawn.h
index 0eed6bab..7d8a67a7 100644
--- a/dbus/dbus-spawn.h
+++ b/dbus/dbus-spawn.h
@@ -47,6 +47,8 @@ void _dbus_babysitter_kill_child (DBusBabysitter *si
dbus_bool_t _dbus_babysitter_get_child_exited (DBusBabysitter *sitter);
void _dbus_babysitter_set_child_exit_error (DBusBabysitter *sitter,
DBusError *error);
+dbus_bool_t _dbus_babysitter_get_child_exit_status (DBusBabysitter *sitter,
+ int *status);
dbus_bool_t _dbus_babysitter_set_watch_functions (DBusBabysitter *sitter,
DBusAddWatchFunction add_function,
DBusRemoveWatchFunction remove_function,