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
{
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));
}
/**
+ * 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
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,