diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-04-05 14:56:16 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-08-17 19:17:59 +0100 |
commit | 8ec3166b6a40508a91144efedc10dcb32964498e (patch) | |
tree | 06daa26f580a65a4fa6b12eecc3a5d7e41573e3b | |
parent | 7a1abf5243fe5b7adf7211fd7d8c82851f448192 (diff) |
dbus-gobject: factor out reply_or_die, error_or_die and add error-checking
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=35766
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
-rw-r--r-- | dbus/dbus-gobject.c | 83 |
1 files changed, 50 insertions, 33 deletions
diff --git a/dbus/dbus-gobject.c b/dbus/dbus-gobject.c index 6066d70..29264a8 100644 --- a/dbus/dbus-gobject.c +++ b/dbus/dbus-gobject.c @@ -35,6 +35,43 @@ #include "dbus-gvalue-utils.h" #include <string.h> +#include <gio/gio.h> + +static DBusMessage * +reply_or_die (DBusMessage *in_reply_to) +{ + DBusMessage *reply; + + g_return_val_if_fail (in_reply_to != NULL, NULL); + + reply = dbus_message_new_method_return (in_reply_to); + + if (reply == NULL) + g_error ("dbus_message_new_method_return failed: out of memory?"); + + return reply; +} + +static DBusMessage * +error_or_die (DBusMessage *in_reply_to, + const gchar *error_name, + const gchar *error_message) +{ + DBusMessage *reply; + + g_return_val_if_fail (in_reply_to != NULL, NULL); + /* error names are syntactically the same as interface names */ + g_return_val_if_fail (g_dbus_is_interface_name (error_name), NULL); + g_return_val_if_fail (g_utf8_validate (error_message, -1, NULL), NULL); + + reply = dbus_message_new_error (in_reply_to, error_name, error_message); + + if (reply == NULL) + g_error ("dbus_message_new_error failed: out of memory?"); + + return reply; +} + static char *lookup_property_name (GObject *object, const char *wincaps_propiface, const char *requested_propname); @@ -971,9 +1008,7 @@ handle_introspect (DBusConnection *connection, /* Close the XML, and send it to the requesting app */ g_string_append (xml, "</node>\n"); - ret = dbus_message_new_method_return (message); - if (ret == NULL) - g_error ("Out of memory"); + ret = reply_or_die (message); dbus_message_append_args (ret, DBUS_TYPE_STRING, &xml->str, @@ -1016,17 +1051,13 @@ set_object_property (DBusConnection *connection, g_value_unset (&value); - ret = dbus_message_new_method_return (message); - if (ret == NULL) - g_error ("out of memory"); + ret = reply_or_die (message); } else { - ret = dbus_message_new_error (message, - DBUS_ERROR_INVALID_ARGS, - "Argument's D-BUS type can't be converted to a GType"); - if (ret == NULL) - g_error ("out of memory"); + ret = error_or_die (message, + DBUS_ERROR_INVALID_ARGS, + "Argument's D-BUS type can't be converted to a GType"); } return ret; @@ -1044,10 +1075,7 @@ get_object_property (DBusConnection *connection, DBusMessage *ret; DBusMessageIter iter, subiter; - ret = dbus_message_new_method_return (message); - if (ret == NULL) - g_error ("out of memory"); - + ret = reply_or_die (message); g_value_init (&value, pspec->value_type); g_object_get_property (object, pspec->name, &value); @@ -1205,9 +1233,7 @@ get_all_object_properties (DBusConnection *connection, const char *p; char *uscore_propname; - ret = dbus_message_new_method_return (message); - if (ret == NULL) - goto oom; + ret = reply_or_die (message); dbus_message_iter_init_append (ret, &iter_ret); @@ -1442,7 +1468,7 @@ gerror_to_dbus_error_message (const DBusGObjectInfo *object_info, char *error_msg; error_msg = g_strdup_printf ("Method invoked for %s returned FALSE but did not set error", dbus_message_get_member (message)); - reply = dbus_message_new_error (message, "org.freedesktop.DBus.GLib.ErrorError", error_msg); + reply = error_or_die (message, "org.freedesktop.DBus.GLib.ErrorError", error_msg); g_free (error_msg); } else @@ -1512,7 +1538,7 @@ gerror_to_dbus_error_message (const DBusGObjectInfo *object_info, break; } - reply = dbus_message_new_error (message, name, error->message); + reply = error_or_die (message, name, error->message); } else { @@ -1520,16 +1546,11 @@ gerror_to_dbus_error_message (const DBusGObjectInfo *object_info, error_name = gerror_domaincode_to_dbus_error_name (object_info, dbus_message_get_interface (message), error->domain, error->code); - reply = dbus_message_new_error (message, error_name, error->message); - g_free (error_name); - } + reply = error_or_die (message, error_name, error->message); + g_free (error_name); + } } - /* this can only fail through a programming error in dbus-glib - * (@message is bad), or OOM */ - if (reply == NULL) - g_error ("dbus_message_new_error failed: out of memory?"); - return reply; } @@ -1812,11 +1833,7 @@ invoke_object_method (GObject *object, */ if (send_reply) { - reply = dbus_message_new_method_return (message); - /* this can only fail through a programming error in dbus-glib - * itself (passing a bad message), or OOM */ - if (reply == NULL) - g_error ("dbus_message_new_method_return failed: out of memory?"); + reply = reply_or_die (message); /* Append output arguments to reply */ dbus_message_iter_init_append (reply, &iter); |