Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bank/bank-info.c
diff options
context:
space:
mode:
Diffstat (limited to 'bank/bank-info.c')
-rw-r--r--bank/bank-info.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/bank/bank-info.c b/bank/bank-info.c
index f60f616..0aaee0c 100644
--- a/bank/bank-info.c
+++ b/bank/bank-info.c
@@ -582,7 +582,34 @@ _wrap_g_function_info_invoke(PyGIBaseInfo *self, PyObject *args)
g_assert(next_rval < n_return_values);
g_assert(out_args_pos < expected_out_argc);
- PyObject *obj = pyg_argument_to_pyobject(out_args[out_args_pos].v_pointer, arg_type_info);
+ PyObject *obj;
+ GITypeTag type_tag = g_type_info_get_tag(arg_type_info);
+
+ if (type_tag == GI_TYPE_TAG_ARRAY) {
+ GArgument *arg = out_args[out_args_pos].v_pointer;
+ gint length_arg_index = g_type_info_get_array_length(arg_type_info);
+ GArgument *length_arg;
+
+ if (is_method)
+ length_arg_index--;
+
+ if (length_arg_index == -1) {
+ PyErr_SetString(PyExc_NotImplementedError, "Need a field to specify the array length");
+ return NULL;
+ }
+
+ length_arg = out_args[length_arg_index].v_pointer;
+
+ printf("index %d pointer %p\n", length_arg_index, length_arg);fflush(stdout);
+
+ if (length_arg == NULL) {
+ PyErr_SetString(PyExc_RuntimeError, "Failed to get the length of the array");
+ return NULL;
+ }
+
+ obj = pyarray_to_pyobject(arg->v_pointer, length_arg->v_int, arg_type_info);
+ } else
+ obj = pyg_argument_to_pyobject(out_args[out_args_pos].v_pointer, arg_type_info);
if (obj == NULL) {
return NULL;
}