glib bindings and memory management
david at fubar.dk
Wed May 4 07:56:42 PDT 2005
On Tue, 2005-05-03 at 02:21 -0400, Colin Walters wrote:
> 2) Map these return values to the GLib types, and have a specific
> protocol for deallocation. For example, we would do this:
> my_object_foo (MyObject *obj, DBusGArray *array, GArray **ret, GError
Shouldn't this IN parameter be a GArray?
> int i;
> *ret = g_array_new (FALSE, TRUE, sizeof (gchar *));
> for (i = 0; i < array->length; i++)
> char *val = g_strdup_printf ("%d", array->values[i]);
> g_array_append_val (*ret, val);
> Note that now we are requiring the dbus library to know that for an
> array of strings, it should individually free() each value, and to use
> g_array_free (arr, TRUE). The complication here is variants; for those
> we really need the dbus_gvalue_* functions which basically wrap the
> message iter API. I think this second option is nicer though since it
> feels more native.
I prefer a solution where we don't need DBusGArray.
More information about the dbus