From 5a811135f73057b81ef7080022d313bb58ee8419 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Wed, 11 May 2011 20:57:54 -0400 Subject: [PATCH] Add g_dbus_method_invocation_take_error() convenience method Similar in spirit to g_simple_async_result_take_error(). Signed-off-by: David Zeuthen --- docs/reference/gio/gio-sections.txt | 1 + gio/gdbusmethodinvocation.c | 22 ++++++++++++++++++++++ gio/gdbusmethodinvocation.h | 2 ++ gio/gio.symbols | 1 + 4 files changed, 26 insertions(+) diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt index af1700973..cacd01214 100644 --- a/docs/reference/gio/gio-sections.txt +++ b/docs/reference/gio/gio-sections.txt @@ -2518,6 +2518,7 @@ g_dbus_method_invocation_return_error_valist g_dbus_method_invocation_return_error_literal g_dbus_method_invocation_return_gerror g_dbus_method_invocation_return_dbus_error +g_dbus_method_invocation_take_error G_DBUS_METHOD_INVOCATION G_IS_DBUS_METHOD_INVOCATION diff --git a/gio/gdbusmethodinvocation.c b/gio/gdbusmethodinvocation.c index c3daf912f..6dd7155d9 100644 --- a/gio/gdbusmethodinvocation.c +++ b/gio/gdbusmethodinvocation.c @@ -555,6 +555,28 @@ g_dbus_method_invocation_return_gerror (GDBusMethodInvocation *invocation, g_free (dbus_error_name); } +/** + * g_dbus_method_invocation_take_error: (skip) + * @invocation: (transfer full): A #GDBusMethodInvocation. + * @error: (transfer full): A #GError. + * + * Like g_dbus_method_invocation_return_gerror() but takes ownership + * of @error so the caller does not need to free it. + * + * This method will free @invocation, you cannot use it afterwards. + * + * Since: 2.30 + */ +void +g_dbus_method_invocation_take_error (GDBusMethodInvocation *invocation, + GError *error) +{ + g_return_if_fail (G_IS_DBUS_METHOD_INVOCATION (invocation)); + g_return_if_fail (error != NULL); + g_dbus_method_invocation_return_gerror (invocation, error); + g_error_free (error); +} + /** * g_dbus_method_invocation_return_dbus_error: * @invocation: (transfer full): A #GDBusMethodInvocation. diff --git a/gio/gdbusmethodinvocation.h b/gio/gdbusmethodinvocation.h index 550313e8b..8b8d050cf 100644 --- a/gio/gdbusmethodinvocation.h +++ b/gio/gdbusmethodinvocation.h @@ -64,6 +64,8 @@ void g_dbus_method_invocation_return_error_literal (GDBusMetho const gchar *message); void g_dbus_method_invocation_return_gerror (GDBusMethodInvocation *invocation, const GError *error); +void g_dbus_method_invocation_take_error (GDBusMethodInvocation *invocation, + GError *error); void g_dbus_method_invocation_return_dbus_error (GDBusMethodInvocation *invocation, const gchar *error_name, const gchar *error_message); diff --git a/gio/gio.symbols b/gio/gio.symbols index 59e1a143d..176666d18 100644 --- a/gio/gio.symbols +++ b/gio/gio.symbols @@ -1824,6 +1824,7 @@ g_dbus_method_invocation_return_error g_dbus_method_invocation_return_error_literal g_dbus_method_invocation_return_error_valist g_dbus_method_invocation_return_gerror +g_dbus_method_invocation_take_error g_dbus_method_invocation_return_value #endif #endif