From 0c6f2bbff503c10212589c1540d06b29395587aa Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 27 Jun 2005 18:20:20 +0000 Subject: 2005-06-27 Colin Walters * test/glib/test-dbus-glib.c: * test/glib/test-service-glib.c: * test/glib/test-service-glib.xml: Test hash table signal emitting. * glib/dbus-gobject.c (_dbus_gobject_lookup_marshaller): Convert types to their fundamental basis types, since this is what marshallers operate on. Also add an entry for VOID__BOXED. (dbus_g_object_register_marshaller_array): Convert to fundamental. --- glib/dbus-gobject.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'glib/dbus-gobject.c') diff --git a/glib/dbus-gobject.c b/glib/dbus-gobject.c index 00528906..93c65a2f 100644 --- a/glib/dbus-gobject.c +++ b/glib/dbus-gobject.c @@ -1429,10 +1429,18 @@ _dbus_gobject_lookup_marshaller (GType rettype, { GClosureMarshal ret; DBusGFuncSignature sig; + GType *params; + guint i; + + /* Convert to fundamental types */ + rettype = G_TYPE_FUNDAMENTAL (rettype); + params = g_new (GType, n_params); + for (i = 0; i < n_params; i++) + params[i] = G_TYPE_FUNDAMENTAL (param_types[i]); sig.rettype = rettype; sig.n_params = n_params; - sig.params = (GType*) param_types; + sig.params = params; g_static_rw_lock_reader_lock (&globals_lock); @@ -1451,7 +1459,7 @@ _dbus_gobject_lookup_marshaller (GType rettype, ret = g_cclosure_marshal_VOID__VOID; else if (n_params == 1) { - switch (param_types[0]) + switch (params[0]) { case G_TYPE_BOOLEAN: ret = g_cclosure_marshal_VOID__BOOLEAN; @@ -1471,18 +1479,22 @@ _dbus_gobject_lookup_marshaller (GType rettype, case G_TYPE_STRING: ret = g_cclosure_marshal_VOID__STRING; break; + case G_TYPE_BOXED: + ret = g_cclosure_marshal_VOID__BOXED; + break; } } } else if (n_params == 3 - && param_types[0] == G_TYPE_STRING - && param_types[1] == G_TYPE_STRING - && param_types[2] == G_TYPE_STRING) + && params[0] == G_TYPE_STRING + && params[1] == G_TYPE_STRING + && params[2] == G_TYPE_STRING) { ret = _dbus_g_marshal_NONE__STRING_STRING_STRING; } } + g_free (params); return ret; } @@ -1536,6 +1548,7 @@ dbus_g_object_register_marshaller_array (GClosureMarshal marshaller, const GType* types) { DBusGFuncSignature *sig; + guint i; g_static_rw_lock_writer_lock (&globals_lock); @@ -1545,10 +1558,11 @@ dbus_g_object_register_marshaller_array (GClosureMarshal marshaller, g_free, NULL); sig = g_new0 (DBusGFuncSignature, 1); - sig->rettype = rettype; + sig->rettype = G_TYPE_FUNDAMENTAL (rettype); sig->n_params = n_types; sig->params = g_new (GType, n_types); - memcpy (sig->params, types, n_types * sizeof (GType)); + for (i = 0; i < n_types; i++) + sig->params[i] = G_TYPE_FUNDAMENTAL (types[i]); g_hash_table_insert (marshal_table, sig, marshaller); -- cgit