From b8386eebec4505d9719500f7c54f0f27a245027a Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Tue, 20 May 2008 16:34:39 +0000 Subject: [PATCH] Fix D-Bus method calls returning arrays, fixes bug 529351 2008-05-20 Juerg Billeter * gobject/valaccodedynamicmethodbinding.vala: Fix D-Bus method calls returning arrays, fixes bug 529351 svn path=/trunk/; revision=1402 --- ChangeLog | 6 ++++++ gobject/valaccodedynamicmethodbinding.vala | 31 +++++++++++++++--------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index bd6568b..90fe998 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-05-20 Jürg Billeter + + * gobject/valaccodedynamicmethodbinding.vala: + + Fix D-Bus method calls returning arrays, fixes bug 529351 + 2008-05-19 Jürg Billeter * vala/Makefile.am: diff --git a/gobject/valaccodedynamicmethodbinding.vala b/gobject/valaccodedynamicmethodbinding.vala index 17a2f24..5648e30 100644 --- a/gobject/valaccodedynamicmethodbinding.vala +++ b/gobject/valaccodedynamicmethodbinding.vala @@ -207,13 +207,14 @@ public class Vala.CCodeDynamicMethodBinding : CCodeMethodBinding { block.add_statement (new CCodeExpressionStatement (ccall)); - block.add_statement (new CCodeReturnStatement (new CCodeMemberAccess.pointer (new CCodeIdentifier ("result"), "data"))); + // *result_length1 = result->len; + var garray_length = new CCodeMemberAccess.pointer (new CCodeIdentifier ("result"), "len"); + var result_length = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("result_length1")); + var assign = new CCodeAssignment (result_length, garray_length); + block.add_statement (new CCodeExpressionStatement (assign)); - if (!method.no_array_length) { - expr.append_array_size (new CCodeMemberAccess.pointer (new CCodeIdentifier ("result"), "len")); - } else { - expr.append_array_size (new CCodeConstant ("-1")); - } + // return result->data; + block.add_statement (new CCodeReturnStatement (new CCodeMemberAccess.pointer (new CCodeIdentifier ("result"), "data"))); } else { // string arrays or other datatypes @@ -234,18 +235,18 @@ public class Vala.CCodeDynamicMethodBinding : CCodeMethodBinding { block.add_statement (new CCodeExpressionStatement (ccall)); - block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("result"))); - if (array_type != null) { // special case string array - if (!method.no_array_length) { - var cstrvlen = new CCodeFunctionCall (new CCodeIdentifier ("g_strv_length")); - cstrvlen.add_argument (new CCodeIdentifier ("result")); - expr.append_array_size (cstrvlen); - } else { - expr.append_array_size (new CCodeConstant ("-1")); - } + + // *result_length1 = g_strv_length (result); + var cstrvlen = new CCodeFunctionCall (new CCodeIdentifier ("g_strv_length")); + cstrvlen.add_argument (new CCodeIdentifier ("result")); + var result_length = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("result_length1")); + var assign = new CCodeAssignment (result_length, cstrvlen); + block.add_statement (new CCodeExpressionStatement (assign)); } + + block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("result"))); } } else { block.add_statement (new CCodeExpressionStatement (ccall)); -- 2.7.4