diff options
Diffstat (limited to 'glib')
-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); |