diff options
author | Colin Walters <walters@verbum.org> | 2005-06-27 18:20:20 +0000 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2005-06-27 18:20:20 +0000 |
commit | 0c6f2bbff503c10212589c1540d06b29395587aa (patch) | |
tree | de341ef0b08f56ab97669cc2c65fb96aa1b04e71 /glib/dbus-gobject.c | |
parent | 3427ef3d39c585ce574dfd01563de6e575217e5e (diff) |
2005-06-27 Colin Walters <walters@verbum.org>
* 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.
Diffstat (limited to 'glib/dbus-gobject.c')
-rw-r--r-- | glib/dbus-gobject.c | 28 |
1 files changed, 21 insertions, 7 deletions
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); |