gobject-introspection 3.4.9 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46669e91b4af175368180fc2152330751da6a7a240f942e6d7acef846822fdf7
4
- data.tar.gz: 0456bafef2aca2d5c43dff46556b11d181251bc95e455b3de4b12d9ddc298f87
3
+ metadata.gz: a24154a126cda02fe928d6a88fb2c31352281fd36df4371ee450339962aa322f
4
+ data.tar.gz: b91549d9c20aaa75735dcc75851d359c85368b17fbbbc058a345d0041e063e2a
5
5
  SHA512:
6
- metadata.gz: a5a15ad2b14adf1be44f0924eb002c24256c77c30016f5fa0734d0035e1a5842ca70edb624614da61c8f3065bcf1f4bc832685cfc383a0e3daa5e5aa020bb312
7
- data.tar.gz: e5e058654ef3ac94dd75dd1c247ee3c68fcda15eb7996f9523688ae77f6f5a7e7d3943f450864aa4acbc94cefa6da6da0a6aec221eaca9bba8de3087a853ad4d
6
+ metadata.gz: 24ee47b97392a89035459cc04f69c6f9fbd65371304446b5b5b61d61b0555dacd94a2ca0f720b451254b7bf3f5afd0285362819b4707f95bd9fad91d241765cf
7
+ data.tar.gz: bb32ddd70238b06c68349c237aec55a1f44a48ea9a712cc5eba4c4fd0b5f30a6ae8651288746f5f7ef48d88c7f2d6295d8fe6f1d90a65409537696efd6fa44ff
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2019 Ruby-GNOME Project Team
3
+ * Copyright (C) 2012-2022 Ruby-GNOME Project Team
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
6
6
  * modify it under the terms of the GNU Lesser General Public
@@ -23,6 +23,41 @@
23
23
  #define RG_TARGET_NAMESPACE rb_cGIArgInfo
24
24
  #define SELF(self) (RVAL2GI_ARG_INFO(self))
25
25
 
26
+ gboolean
27
+ rb_gi_arg_info_is_input_buffer(GIArgInfo *info)
28
+ {
29
+ if (g_arg_info_get_direction(info) != GI_DIRECTION_IN) {
30
+ return FALSE;
31
+ }
32
+
33
+ /* Heuristic */
34
+ const gchar *name = g_base_info_get_name((GIBaseInfo *)info);
35
+ if (strcmp(name, "buffer") != 0) {
36
+ return FALSE;
37
+ }
38
+
39
+ GITypeInfo type_info;
40
+ g_arg_info_load_type(info, &type_info);
41
+ if (g_type_info_get_tag(&type_info) != GI_TYPE_TAG_ARRAY) {
42
+ return FALSE;
43
+ }
44
+
45
+ GIArrayType array_type = g_type_info_get_array_type(&type_info);
46
+ if (array_type != GI_ARRAY_TYPE_C) {
47
+ return FALSE;
48
+ }
49
+
50
+ gint length_index = g_type_info_get_array_length(&type_info);
51
+ if (length_index == -1) {
52
+ return FALSE;
53
+ }
54
+
55
+ GITypeInfo *element_type_info = g_type_info_get_param_type(&type_info, 0);
56
+ GITypeTag element_type_tag = g_type_info_get_tag(element_type_info);
57
+ g_base_info_unref(element_type_info);
58
+ return element_type_tag == GI_TYPE_TAG_UINT8;
59
+ }
60
+
26
61
  gboolean
27
62
  rb_gi_arg_info_is_output_buffer(GIArgInfo *info)
28
63
  {
@@ -148,6 +183,13 @@ rg_type(VALUE self)
148
183
  return GI_BASE_INFO2RVAL_WITH_UNREF(g_arg_info_get_type(info));
149
184
  }
150
185
 
186
+ static VALUE
187
+ rg_input_buffer_p(VALUE self)
188
+ {
189
+ GIArgInfo *info = SELF(self);
190
+ return CBOOL2RVAL(rb_gi_arg_info_is_input_buffer(info));
191
+ }
192
+
151
193
  static VALUE
152
194
  rg_output_buffer_p(VALUE self)
153
195
  {
@@ -175,6 +217,7 @@ rb_gi_arg_info_init(VALUE rb_mGI, VALUE rb_cGIBaseInfo)
175
217
  RG_DEF_METHOD(destroy, 0);
176
218
  RG_DEF_METHOD(type, 0);
177
219
 
220
+ RG_DEF_METHOD_P(input_buffer, 0);
178
221
  RG_DEF_METHOD_P(output_buffer, 0);
179
222
 
180
223
  G_DEF_CLASS(G_TYPE_I_DIRECTION, "Direction", rb_mGI);
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2021 Ruby-GNOME Project Team
3
+ * Copyright (C) 2012-2022 Ruby-GNOME Project Team
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
6
6
  * modify it under the terms of the GNU Lesser General Public
@@ -36,7 +36,6 @@ rb_gi_arguments_in_to_ruby(RBGIArguments *args)
36
36
  rb_in_args = rb_ary_new_capa(args->metadata->len);
37
37
  for (i = 0; i < args->metadata->len; i++) {
38
38
  RBGIArgMetadata *metadata;
39
- GITypeInfo *type_info;
40
39
  VALUE rb_arg;
41
40
 
42
41
  metadata = g_ptr_array_index(args->metadata, i);
@@ -47,15 +46,14 @@ rb_gi_arguments_in_to_ruby(RBGIArguments *args)
47
46
  if (metadata->closure_p) {
48
47
  continue;
49
48
  }
49
+ if (metadata->array_length_p) {
50
+ continue;
51
+ }
50
52
 
51
- type_info = g_arg_info_get_type(&(metadata->arg_info));
52
- /* TODO */
53
- rb_arg = GI_ARGUMENT2RVAL(metadata->in_arg,
54
- FALSE,
55
- type_info,
56
- args->in_args,
57
- args->out_args,
58
- args->metadata);
53
+ rb_arg = rb_gi_arguments_convert_arg(args,
54
+ metadata->in_arg,
55
+ metadata,
56
+ FALSE);
59
57
  rb_ary_push(rb_in_args, rb_arg);
60
58
  }
61
59
 
@@ -2023,16 +2021,18 @@ rb_gi_arguments_in_init_arg_raw_interface(RBGIArguments *args,
2023
2021
  metadata->in_arg->v_pointer = *((gpointer *)(args->raw_args[metadata->index]));
2024
2022
  break;
2025
2023
  case GI_INFO_TYPE_BOXED:
2024
+ rb_raise(rb_eNotImpError,
2025
+ "TODO: %s::%s: raw argument -> GIArgument(interface)[%s]: <%s>",
2026
+ g_base_info_get_namespace(args->info),
2027
+ g_base_info_get_name(args->info),
2028
+ g_info_type_to_string(metadata->type.interface_type),
2029
+ g_base_info_get_name(metadata->type.interface_info));
2030
+ break;
2026
2031
  case GI_INFO_TYPE_ENUM:
2027
- rb_raise(rb_eNotImpError,
2028
- "TODO: %s::%s: raw argument -> GIArgument(interface)[%s]: <%s>",
2029
- g_base_info_get_namespace(args->info),
2030
- g_base_info_get_name(args->info),
2031
- g_info_type_to_string(metadata->type.interface_type),
2032
- g_base_info_get_name(metadata->type.interface_info));
2033
- break;
2032
+ metadata->in_arg->v_int32 = *((gint32 *)(args->raw_args[metadata->index]));
2033
+ break;
2034
2034
  case GI_INFO_TYPE_FLAGS:
2035
- metadata->in_arg->v_int32= *((gint32 *)(args->raw_args[metadata->index]));
2035
+ metadata->in_arg->v_int32 = *((gint32 *)(args->raw_args[metadata->index]));
2036
2036
  break;
2037
2037
  case GI_INFO_TYPE_OBJECT:
2038
2038
  case GI_INFO_TYPE_INTERFACE:
@@ -2164,12 +2164,15 @@ rb_gi_arguments_in_init(RBGIArguments *args)
2164
2164
  void
2165
2165
  rb_gi_arguments_in_clear(RBGIArguments *args)
2166
2166
  {
2167
- guint i;
2167
+ if (!args->metadata) {
2168
+ return;
2169
+ }
2168
2170
 
2169
2171
  if (!args->rb_mode_p) {
2170
2172
  return;
2171
2173
  }
2172
2174
 
2175
+ guint i;
2173
2176
  for (i = 0; i < args->metadata->len; i++) {
2174
2177
  RBGIArgMetadata *metadata;
2175
2178
 
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2019 Ruby-GNOME Project Team
3
+ * Copyright (C) 2012-2022 Ruby-GNOME Project Team
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
6
6
  * modify it under the terms of the GNU Lesser General Public
@@ -140,6 +140,7 @@ rb_gi_arguments_out_free_array_array_interface_struct(RBGIArguments *args,
140
140
  */
141
141
  break;
142
142
  }
143
+ G_GNUC_FALLTHROUGH;
143
144
  default:
144
145
  rb_raise(rb_eNotImpError,
145
146
  "TODO: [%s] %s free GIArgument(%s/%s)[interface(%s)](%s)[%s]",
@@ -150,6 +151,7 @@ rb_gi_arguments_out_free_array_array_interface_struct(RBGIArguments *args,
150
151
  g_info_type_to_string(metadata->element_type.interface_type),
151
152
  g_type_name(metadata->element_type.interface_gtype),
152
153
  rb_gi_transfer_to_string(metadata->transfer));
154
+ break;
153
155
  }
154
156
  g_array_free(target, TRUE);
155
157
  }
@@ -264,14 +266,6 @@ rb_gi_arguments_out_free_error(RBGIArguments *args,
264
266
  gpointer user_data)
265
267
  {
266
268
  GError **target = metadata->out_arg->v_pointer;
267
- if (metadata->transfer != GI_TRANSFER_NOTHING) {
268
- rb_raise(rb_eNotImpError,
269
- "TODO: [%s] %s free GIArgument(%s)[%s]",
270
- metadata->name,
271
- rb_gi_direction_to_string(metadata->direction),
272
- g_type_tag_to_string(metadata->type.tag),
273
- rb_gi_transfer_to_string(metadata->transfer));
274
- }
275
269
  xfree(target);
276
270
  }
277
271
 
@@ -315,7 +309,12 @@ rb_gi_arguments_out_init_arg_array_c(RBGIArguments *args,
315
309
  rb_gi_transfer_to_string(metadata->transfer));
316
310
  }
317
311
  argument->v_pointer = RSTRING_PTR(metadata->rb_arg);
318
- length_metadata->out_arg->v_size = RSTRING_LEN(metadata->rb_arg);
312
+ if (length_metadata->in_arg) {
313
+ length_metadata->in_arg->v_size = RSTRING_LEN(metadata->rb_arg);
314
+ }
315
+ if (length_metadata->out_arg) {
316
+ length_metadata->out_arg->v_size = RSTRING_LEN(metadata->rb_arg);
317
+ }
319
318
  } else {
320
319
  argument->v_pointer = ALLOC(guint8 *);
321
320
  metadata->free_func = rb_gi_arguments_out_free_array_c_uint8;
@@ -788,8 +787,11 @@ rb_gi_arguments_out_init(RBGIArguments *args)
788
787
  void
789
788
  rb_gi_arguments_out_clear(RBGIArguments *args)
790
789
  {
791
- guint i;
790
+ if (!args->metadata) {
791
+ return;
792
+ }
792
793
 
794
+ guint i;
793
795
  for (i = 0; i < args->metadata->len; i++) {
794
796
  RBGIArgMetadata *metadata;
795
797
 
@@ -887,12 +889,10 @@ rb_gi_arguments_out_to_ruby_arg(RBGIArguments *args,
887
889
  break;
888
890
  }
889
891
 
890
- return rb_gi_argument_to_ruby(&normalized_argument,
891
- duplicate,
892
- metadata->type.info,
893
- args->in_args,
894
- args->out_args,
895
- args->metadata);
892
+ return rb_gi_arguments_convert_arg(args,
893
+ &normalized_argument,
894
+ metadata,
895
+ duplicate);
896
896
  }
897
897
 
898
898
  VALUE