]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
posix: Fix array creation and destruction in POSIX profile
authorJürg Billeter <j@bitron.ch>
Mon, 12 Oct 2009 19:25:49 +0000 (21:25 +0200)
committerJürg Billeter <j@bitron.ch>
Mon, 12 Oct 2009 19:26:35 +0000 (21:26 +0200)
Based on patch by pancake.

codegen/valaccodearraymodule.vala
codegen/valaccodebasemodule.vala

index da08cdff5e3e6e29dac47ef5f52a132b7e19cb87..0d745b0dcb87dd6cdf0a575a031cf1264a064af6 100644 (file)
@@ -65,8 +65,15 @@ internal class Vala.CCodeArrayModule : CCodeMethodCallModule {
                        return;
                }
 
-               var gnew = new CCodeFunctionCall (new CCodeIdentifier ("g_new0"));
-               gnew.add_argument (new CCodeIdentifier (expr.element_type.get_cname ()));
+               CCodeFunctionCall gnew;
+               if (context.profile == Profile.POSIX) {
+                       source_declarations.add_include ("stdlib.h");
+                       gnew = new CCodeFunctionCall (new CCodeIdentifier ("calloc"));
+               } else {
+                       gnew = new CCodeFunctionCall (new CCodeIdentifier ("g_new0"));
+                       gnew.add_argument (new CCodeIdentifier (expr.element_type.get_cname ()));
+               }
+
                bool first = true;
                CCodeExpression cexpr = null;
 
@@ -99,6 +106,12 @@ internal class Vala.CCodeArrayModule : CCodeMethodCallModule {
                
                gnew.add_argument (cexpr);
 
+               if (context.profile == Profile.POSIX) {
+                       var csizeof = new CCodeFunctionCall (new CCodeIdentifier ("sizeof"));
+                       csizeof.add_argument (new CCodeIdentifier (expr.element_type.get_cname ()));
+                       gnew.add_argument (csizeof);
+               }
+
                if (expr.initializer_list != null) {
                        var ce = new CCodeCommaExpression ();
                        var temp_var = get_temp_variable (expr.value_type, true, expr);
index 5d440e7945b658e9ed9ccaf7c71d1489f7ad9437..f88bc27d6922b6ff6e167e1cabb4caf662c757d4 100644 (file)
@@ -2470,9 +2470,17 @@ internal class Vala.CCodeBaseModule : CCodeModule {
                                return new CCodeIdentifier (func_name);
                        }
                } else if (type is ArrayType) {
-                       return new CCodeIdentifier ("g_free");
+                       if (context.profile == Profile.POSIX) {
+                               return new CCodeIdentifier ("free");
+                       } else {
+                               return new CCodeIdentifier ("g_free");
+                       }
                } else if (type is PointerType) {
-                       return new CCodeIdentifier ("g_free");
+                       if (context.profile == Profile.POSIX) {
+                               return new CCodeIdentifier ("free");
+                       } else {
+                               return new CCodeIdentifier ("g_free");
+                       }
                } else {
                        return new CCodeConstant ("NULL");
                }