]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix retrieving D-Bus structs with owned strings
authorJürg Billeter <j@bitron.ch>
Thu, 13 Nov 2008 13:08:56 +0000 (13:08 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 13 Nov 2008 13:08:56 +0000 (13:08 +0000)
2008-11-13  Jürg Billeter  <j@bitron.ch>

* gobject/valadbusclientmodule.vala:

Fix retrieving D-Bus structs with owned strings

svn path=/trunk/; revision=2012

ChangeLog
gobject/valadbusclientmodule.vala

index 8456d00367454f210ae744437143e8033e05433e..6cc272d55fc5b22b4b8584c19d53f3a2a4fb0fd5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-11-13  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valadbusclientmodule.vala:
+
+       Fix retrieving D-Bus structs with owned strings
+
 2008-11-13  Jürg Billeter  <j@bitron.ch>
 
        * gobject/valaccodebasemodule.vala:
index 0fb1d704c75c15cac41c833abac64ee3e627fa30..92273619dee214ea58c54cef77f901a001137dd8 100644 (file)
@@ -345,7 +345,16 @@ public class Vala.DBusClientModule : GAsyncModule {
 
                                        var cget_call = new CCodeFunctionCall (new CCodeIdentifier (f.field_type.data_type.get_get_value_function ()));
                                        cget_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeElementAccess (new CCodeMemberAccess.pointer (new CCodeIdentifier ("dbus_%s".printf (param.name)), "values"), new CCodeConstant (i.to_string ()))));
-                                       var assign = new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier (param.name), f.name), cget_call);
+
+                                       var converted_value = cget_call;
+
+                                       if (requires_copy (f.field_type)) {
+                                               var dupexpr = get_dup_func_expression (f.field_type, expr.source_reference);
+                                               converted_value = new CCodeFunctionCall (dupexpr);
+                                               converted_value.add_argument (cget_call);
+                                       }
+
+                                       var assign = new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier (param.name), f.name), converted_value);
                                        out_marshalling_fragment.append (new CCodeExpressionStatement (assign));
 
                                        type_call.add_argument (new CCodeIdentifier (f.field_type.data_type.get_type_id ()));