From f116b1282f8482dff6dc797f64270d95f79b53a3 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sun, 16 Feb 2003 10:00:37 +0000 Subject: 2003-02-16 Anders Carlsson * bus/activation.c: (load_directory), (bus_activation_init), (bus_activation_activate_service): * bus/activation.h: * bus/driver.c: (bus_driver_handle_activate_service), (bus_driver_handle_message): More work on the activation handling. * dbus/dbus-errors.h: Add some error messages * dbus/dbus-message.c: (dbus_message_new_error_reply): * dbus/dbus-message.h: New function that creates an error message. * dbus/dbus-protocol.h: Add ACTIVATE_SERVER message. * dbus/dbus-server-unix.c: (unix_handle_watch), (_dbus_server_new_for_domain_socket): Call _dbus_fd_set_close_on_exec. * dbus/dbus-sysdeps.c: (make_pipe), (do_exec), (_dbus_spawn_async), (_dbus_disable_sigpipe), (_dbus_fd_set_close_on_exec): * dbus/dbus-sysdeps.h: Add _dbus_fd_set_close_on exec function. Also add function that checks that all open fds are set to close-on-exec and warns otherwise. * dbus/dbus-transport-unix.c: (_dbus_transport_new_for_domain_socket): Call _dbus_fd_set_close_on_exec. --- dbus/dbus-message.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'dbus/dbus-message.c') diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index aca8c2cb..fced9c72 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -816,6 +816,50 @@ dbus_message_new_reply (DBusMessage *original_message) return message; } +/** + * Creates a new message that is an error reply to a certain message. + * + * @param original_message the original message + * @param error_name the error name + * @param error_message the error message string + * @returns a new error message + */ +DBusMessage* +dbus_message_new_error_reply (DBusMessage *original_message, + const char *error_name, + const char *error_message) +{ + DBusMessage *message; + const char *sender; + + sender = get_string_field (original_message, + FIELD_SENDER, NULL); + + _dbus_assert (sender != NULL); + + message = dbus_message_new (sender, error_name); + + if (message == NULL) + return NULL; + + if (!_dbus_message_set_reply_serial (message, + _dbus_message_get_client_serial (original_message))) + { + dbus_message_unref (message); + return NULL; + } + + if (!dbus_message_append_string (message, error_message)) + { + dbus_message_unref (message); + return NULL; + } + + dbus_message_set_is_error (message, TRUE); + + return message; +} + /** * Creates a new message that is an exact replica of the message * specified, except that its refcount is set to 1. -- cgit