static void in_arguments_to_ruby(GArray *in_args, GArray *out_args, GPtrArray *args_metadata, GArray *rb_args) { guint i; for (i = 0; i < args_metadata->len; i++) { RBGIArgMetadata *metadata; GIArgument *argument; GITypeInfo *type_info; VALUE rb_arg; metadata = g_ptr_array_index(args_metadata, i); if (metadata->direction == GI_DIRECTION_OUT) { continue; } if (metadata->closure_p) { continue; } argument = &g_array_index(in_args, GIArgument, metadata->in_arg_index); type_info = g_arg_info_get_type(&(metadata->arg_info)); rb_arg = GI_ARGUMENT2RVAL(argument, FALSE, type_info, in_args, out_args, args_metadata); g_array_append_val(rb_args, rb_arg); } }
type_tag = g_type_info_get_tag(type_info); if (!g_field_info_get_field(info, memory, &argument)) { g_base_info_unref(type_info); rb_raise(rb_eArgError, "failed to get field value: %s[%s]", g_base_info_get_name(info), g_type_tag_to_string(type_tag)); } if (type_tag == GI_TYPE_TAG_UTF8) { int offset; offset = g_field_info_get_offset(info); argument.v_string = G_STRUCT_MEMBER(gchar *, memory, offset); } rb_field_value = GI_ARGUMENT2RVAL(&argument, FALSE, type_info, NULL, NULL, NULL); g_base_info_unref(type_info); return rb_field_value; } void rb_gi_field_info_set_field_raw(GIFieldInfo *info, gpointer memory, VALUE rb_field_value) { GIArgument field_value; GITypeInfo *type_info; GITypeTag type_tag; gboolean succeeded; type_info = g_field_info_get_type(info);