From 78245816603b8f03331f892cd87922e9d2b9b5cb Mon Sep 17 00:00:00 2001 From: Robert McQueen Date: Thu, 19 Jan 2006 02:54:07 +0000 Subject: 2006-01-19 Robert McQueen * glib/dbus-binding-tool-glib.c: Patch from Rob Taylor to add support for generating bindings to arrays that are represented as GPtrArrays rather than GArrays (ie size-variable things, such as strings, objects, structs, etc). --- glib/dbus-binding-tool-glib.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'glib') diff --git a/glib/dbus-binding-tool-glib.c b/glib/dbus-binding-tool-glib.c index f75a18a4..719296f0 100644 --- a/glib/dbus-binding-tool-glib.c +++ b/glib/dbus-binding-tool-glib.c @@ -97,11 +97,19 @@ dbus_g_type_get_marshal_name (GType gtype) static const char * dbus_g_type_get_c_name (GType gtype) { + GType subtype; if (dbus_g_type_is_collection (gtype)) - return "GArray"; + { + subtype = dbus_g_type_get_collection_specialization(gtype); + if (_dbus_g_type_is_fixed (subtype)) + return "GArray"; + else + return "GPtrArray"; + } + if (dbus_g_type_is_map (gtype)) return "GHashTable"; - + if (g_type_is_a (gtype, G_TYPE_STRING)) return "char *"; @@ -110,9 +118,10 @@ dbus_g_type_get_c_name (GType gtype) */ if (g_type_is_a (gtype, G_TYPE_STRV)) return "char *"; + if (g_type_is_a (gtype, DBUS_TYPE_G_OBJECT_PATH)) return "char"; - + return g_type_name (gtype); } @@ -1005,13 +1014,24 @@ dbus_g_type_get_lookup_function (GType gtype) { GType elt_gtype; char *sublookup; - + elt_gtype = dbus_g_type_get_collection_specialization (gtype); sublookup = dbus_g_type_get_lookup_function (elt_gtype); g_assert (sublookup); - type_lookup = g_strdup_printf ("dbus_g_type_get_collection (\"GArray\", %s)", - sublookup); + + if (_dbus_g_type_is_fixed (elt_gtype)) + { + type_lookup = g_strdup_printf ("dbus_g_type_get_collection " + "(\"GArray\", %s)", sublookup); + } + else + { + type_lookup = g_strdup_printf ("dbus_g_type_get_collection " + "(\"GPtrArray\", %s)", sublookup); + } + g_free (sublookup); + return type_lookup; } else if (dbus_g_type_is_map (gtype)) -- cgit