summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Ermilov <zaspire@rambler.ru>2011-02-17 23:27:09 +0300
committerColin Walters <walters@verbum.org>2011-05-04 15:01:10 -0400
commit57c51b746cb25261a05533010042d535a1749520 (patch)
treecb1ad8ad1764753d2aab7c79e2764e2c345a21d4
parent2330248ea37ad1251da58700ffb1ea0d578523ee (diff)
downloadgobject-introspection-57c51b746cb25261a05533010042d535a1749520.tar.gz
g_field_info_get_field: return correct pointer for C array
Also add a test case. https://bugzilla.gnome.org/show_bug.cgi?id=640468
-rw-r--r--girepository/gifieldinfo.c5
-rw-r--r--tests/scanner/Regress-1.0-expected.gir10
-rw-r--r--tests/scanner/regress.h5
3 files changed, 19 insertions, 1 deletions
diff --git a/girepository/gifieldinfo.c b/girepository/gifieldinfo.c
index cf5c2332..b9b56a4d 100644
--- a/girepository/gifieldinfo.c
+++ b/girepository/gifieldinfo.c
@@ -193,7 +193,10 @@ g_field_info_get_field (GIFieldInfo *field_info,
if (g_type_info_is_pointer (type_info))
{
- value->v_pointer = G_STRUCT_MEMBER (gpointer, mem, offset);
+ if (g_type_info_get_array_type (type_info) == GI_ARRAY_TYPE_C)
+ value->v_pointer = G_STRUCT_MEMBER_P ((mem), (offset));
+ else
+ value->v_pointer = G_STRUCT_MEMBER (gpointer, mem, offset);
result = TRUE;
}
else
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index 2bae748b..07985544 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -886,6 +886,16 @@ TpAccount::status-changed</doc>
</parameters>
</method>
</record>
+ <record name="TestStructFixedArray" c:type="RegressTestStructFixedArray">
+ <field name="just_int" writable="1">
+ <type name="gint" c:type="gint"/>
+ </field>
+ <field name="array" writable="1">
+ <array zero-terminated="0" c:type="gint" fixed-size="10">
+ <type name="gint" c:type="gint"/>
+ </array>
+ </field>
+ </record>
<class name="TestSubObj"
c:symbol-prefix="test_sub_obj"
c:type="RegressTestSubObj"
diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h
index 89209ebc..5937fa5d 100644
--- a/tests/scanner/regress.h
+++ b/tests/scanner/regress.h
@@ -609,6 +609,11 @@ typedef enum {
REGRESS_TEST_PUBLIC_ENUM_AFTER = 1 << 2,
} RegressTestPrivateEnum;
+typedef struct {
+ gint just_int;
+ gint array[10];
+} RegressTestStructFixedArray;
+
#define REGRESS_UTF8_CONSTANT "const \xe2\x99\xa5 utf8"
#endif /* __GITESTTYPES_H__ */