summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2005-06-13 15:36:31 +0000
committerColin Walters <walters@verbum.org>2005-06-13 15:36:31 +0000
commit9548df2ce95cee1942f615b6f2abf0029e680f5a (patch)
tree2c8bc5649df4ab3d6269f3ff8f45fef85e75b876
parentb539abf9ce1bdc5c55a15ec6670dfe176e2c55ba (diff)
2005-06-13 Ross Burton <ross@burtonini.com>.
* glib/dbus-gobject.c: Handle errors on message demarshalling by sending error message back. * glib/dbus-gvalue.c: Initialize return variables.
-rw-r--r--ChangeLog6
-rw-r--r--glib/dbus-gobject.c11
-rw-r--r--glib/dbus-gvalue.c8
3 files changed, 18 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index da920312..a998853e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-06-13 Ross Burton <ross@burtonini.com>.
+
+ * glib/dbus-gobject.c: Handle errors on message
+ demarshalling by sending error message back.
+ * glib/dbus-gvalue.c: Initialize return variables.
+
2005-06-13 Colin Walters <walters@verbum.org>
* glib/Makefile.am: Fix thinko in last patch.
diff --git a/glib/dbus-gobject.c b/glib/dbus-gobject.c
index e2645f41..311f6b54 100644
--- a/glib/dbus-gobject.c
+++ b/glib/dbus-gobject.c
@@ -772,7 +772,8 @@ invoke_object_method (GObject *object,
guint n_params;
const GType *types;
DBusGValueMarshalCtx context;
-
+ GError *error = NULL;
+
context.gconnection = DBUS_G_CONNECTION_FROM_CONNECTION (connection);
context.proxy = NULL;
@@ -780,12 +781,16 @@ invoke_object_method (GObject *object,
n_params = types_array->len;
types = (const GType*) types_array->data;
- value_array = dbus_gvalue_demarshal_message (&context, message, n_params, types, NULL);
+ value_array = dbus_gvalue_demarshal_message (&context, message, n_params, types, &error);
if (value_array == NULL)
{
g_free (in_signature);
g_array_free (types_array, TRUE);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ reply = dbus_message_new_error (message, "org.freedesktop.DBus.GLib.ErrorError", error->message);
+ dbus_connection_send (connection, reply, NULL);
+ dbus_message_unref (reply);
+ g_error_free (error);
+ return DBUS_HANDLER_RESULT_HANDLED;
}
g_array_free (types_array, TRUE);
}
diff --git a/glib/dbus-gvalue.c b/glib/dbus-gvalue.c
index 8506330d..4eb2803d 100644
--- a/glib/dbus-gvalue.c
+++ b/glib/dbus-gvalue.c
@@ -1300,7 +1300,7 @@ marshal_strv (DBusMessageIter *iter,
DBusMessageIter subiter;
char **array;
char **elt;
- gboolean ret;
+ gboolean ret = FALSE;
g_assert (G_VALUE_TYPE (value) == g_strv_get_type ());
@@ -1336,7 +1336,7 @@ marshal_garray_basic (DBusMessageIter *iter,
GArray *array;
guint elt_size;
const char *subsignature_str;
- gboolean ret;
+ gboolean ret = FALSE;
elt_gtype = dbus_g_type_get_collection_specialization (G_VALUE_TYPE (value));
/* FIXME - this means we can't send an array of DBusGValue right now... */
@@ -1417,7 +1417,7 @@ marshal_proxy_array (DBusMessageIter *iter,
DBusMessageIter subiter;
GPtrArray *array;
const char *subsignature_str;
- gboolean ret;
+ gboolean ret = FALSE;
guint i;
subsignature_str = dbus_gtype_to_signature (DBUS_TYPE_G_PROXY);
@@ -1553,7 +1553,7 @@ marshal_variant (DBusMessageIter *iter,
DBusMessageIter subiter;
char *variant_sig;
GValue *real_value;
- gboolean ret;
+ gboolean ret = FALSE;
real_value = g_value_get_boxed (value);
value_gtype = G_VALUE_TYPE (real_value);