diff options
Diffstat (limited to 'devel/gobject-introspection/files/patch-20100107')
-rw-r--r-- | devel/gobject-introspection/files/patch-20100107 | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/devel/gobject-introspection/files/patch-20100107 b/devel/gobject-introspection/files/patch-20100107 deleted file mode 100644 index 570d2c7c7591..000000000000 --- a/devel/gobject-introspection/files/patch-20100107 +++ /dev/null @@ -1,66 +0,0 @@ -From e7b9f873f0152136af60753598077156e7ae1545 Mon Sep 17 00:00:00 2001 -From: Colin Walters <walters@verbum.org> -Date: Thu, 07 Jan 2010 21:12:15 +0000 -Subject: Correctly cast to a CommonBlob when looking up embedded types - -When looking at an embedded type (e.g. a Callback after a Field), the -offset we put in the info structure was to the CallbackBlob itself. - -However the code in g_type_info_get_interface assumed that the offset -was to a SimpleTypeBlob, which it wasn't. - -https://bugzilla.gnome.org/show_bug.cgi?id=606180 ---- -diff --git a/girepository/ginfo.c b/girepository/ginfo.c -index b11cc8f..ed2fc93 100644 ---- girepository/ginfo.c -+++ girepository/ginfo.c -@@ -997,18 +997,38 @@ GIBaseInfo * - g_type_info_get_interface (GITypeInfo *info) - { - GIRealInfo *rinfo = (GIRealInfo *)info; -- SimpleTypeBlob *type = (SimpleTypeBlob *)&rinfo->typelib->data[rinfo->offset]; - -+ /* For embedded types, the given offset is a pointer to the actual blob, -+ * after the end of the field. In that case we know it's a "subclass" of -+ * CommonBlob, so use that to determine the info type. -+ */ - if (rinfo->type_is_embedded) -- return (GIBaseInfo *) g_info_new (type->offset, (GIBaseInfo*)info, rinfo->typelib, -- rinfo->offset); -+ { -+ CommonBlob *common = (CommonBlob *)&rinfo->typelib->data[rinfo->offset]; -+ GIInfoType info_type; - -- if (!(type->flags.reserved == 0 && type->flags.reserved2 == 0)) -+ switch (common->blob_type) -+ { -+ case BLOB_TYPE_CALLBACK: -+ info_type = GI_INFO_TYPE_CALLBACK; -+ break; -+ default: -+ g_assert_not_reached (); -+ return NULL; -+ } -+ return (GIBaseInfo *) g_info_new (info_type, (GIBaseInfo*)info, rinfo->typelib, -+ rinfo->offset); -+ } -+ else - { -- InterfaceTypeBlob *blob = (InterfaceTypeBlob *)&rinfo->typelib->data[rinfo->offset]; -- -- if (blob->tag == GI_TYPE_TAG_INTERFACE) -- return g_info_from_entry (rinfo->repository, rinfo->typelib, blob->interface); -+ SimpleTypeBlob *type = (SimpleTypeBlob *)&rinfo->typelib->data[rinfo->offset]; -+ if (!(type->flags.reserved == 0 && type->flags.reserved2 == 0)) -+ { -+ InterfaceTypeBlob *blob = (InterfaceTypeBlob *)&rinfo->typelib->data[rinfo->offset]; -+ -+ if (blob->tag == GI_TYPE_TAG_INTERFACE) -+ return g_info_from_entry (rinfo->repository, rinfo->typelib, blob->interface); -+ } - } - - return NULL; --- -cgit v0.8.3.1 |