diff options
Diffstat (limited to 'bank/bank-info.c')
-rw-r--r-- | bank/bank-info.c | 29 |
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; } |