mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-02 13:53:06 +02:00
Fix marshalling of GStrv.
* gir/gimarshallingtests.[hc]: Add a test for GStrv in function args and as struct fields. * girepository/giroffsets.c: Correctly compute the size of structs with array fields * girepository/girparser.c: Set is_pointer to FALSE for arrays with fixed size that are inside structs. * giscanner/glibtransformer.py: Special case GStrv as arrays of utf8. * giscanner/annotationparser.py: Make full transfer the default for arrays of char* returned by functions. https://bugzilla.gnome.org/show_bug.cgi?id=620170
This commit is contained in:
parent
6436e013c9
commit
d531541b8a
10
giroffsets.c
10
giroffsets.c
@ -232,7 +232,11 @@ get_type_size_alignment (GIrNodeType *type,
|
|||||||
{
|
{
|
||||||
ffi_type *type_ffi;
|
ffi_type *type_ffi;
|
||||||
|
|
||||||
if (type->tag == GI_TYPE_TAG_ARRAY)
|
if (type->is_pointer)
|
||||||
|
{
|
||||||
|
type_ffi = &ffi_type_pointer;
|
||||||
|
}
|
||||||
|
else if (type->tag == GI_TYPE_TAG_ARRAY)
|
||||||
{
|
{
|
||||||
gint elt_size, elt_alignment;
|
gint elt_size, elt_alignment;
|
||||||
|
|
||||||
@ -250,10 +254,6 @@ get_type_size_alignment (GIrNodeType *type,
|
|||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else if (type->is_pointer)
|
|
||||||
{
|
|
||||||
type_ffi = &ffi_type_pointer;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (type->tag == GI_TYPE_TAG_INTERFACE)
|
if (type->tag == GI_TYPE_TAG_INTERFACE)
|
||||||
|
@ -1745,6 +1745,9 @@ start_type (GMarkupParseContext *context,
|
|||||||
else
|
else
|
||||||
/* If neither zero-terminated nor length nor fixed-size is given, assume zero-terminated. */
|
/* If neither zero-terminated nor length nor fixed-size is given, assume zero-terminated. */
|
||||||
typenode->zero_terminated = !(typenode->has_length || typenode->has_size);
|
typenode->zero_terminated = !(typenode->has_length || typenode->has_size);
|
||||||
|
|
||||||
|
if (typenode->has_size && ctx->current_typed->type == G_IR_NODE_FIELD)
|
||||||
|
typenode->is_pointer = FALSE;
|
||||||
} else {
|
} else {
|
||||||
typenode->zero_terminated = FALSE;
|
typenode->zero_terminated = FALSE;
|
||||||
typenode->has_length = FALSE;
|
typenode->has_length = FALSE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user