From: Rico Tzschichholz Date: Fri, 18 Oct 2019 22:12:26 +0000 (+0200) Subject: codegen: Use alternative for g_new0 in POSIX profile X-Git-Tag: 0.47.1~63 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b45af91bf7a974973b5c0abc164326b54512642b;p=thirdparty%2Fvala.git codegen: Use alternative for g_new0 in POSIX profile --- diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala index e71f41d70..2d122035f 100644 --- a/codegen/valaccodearraymodule.vala +++ b/codegen/valaccodearraymodule.vala @@ -519,8 +519,14 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule { if (requires_copy (array_type.element_type)) { var cvardecl = new CCodeVariableDeclarator ("result"); - var gnew = new CCodeFunctionCall (new CCodeIdentifier ("g_new0")); - gnew.add_argument (new CCodeIdentifier (get_ccode_name (array_type.element_type))); + CCodeFunctionCall gnew; + if (context.profile == Profile.POSIX) { + cfile.add_include ("stdlib.h"); + gnew = new CCodeFunctionCall (new CCodeIdentifier ("calloc")); + } else { + gnew = new CCodeFunctionCall (new CCodeIdentifier ("g_new0")); + gnew.add_argument (new CCodeIdentifier (get_ccode_name (array_type.element_type))); + } CCodeExpression length_expr = new CCodeIdentifier ("length"); // add extra item to have array NULL-terminated for all reference types @@ -529,6 +535,12 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule { } gnew.add_argument (length_expr); + if (context.profile == Profile.POSIX) { + var csizeof = new CCodeFunctionCall (new CCodeIdentifier ("sizeof")); + csizeof.add_argument (new CCodeIdentifier (get_ccode_name (array_type.element_type))); + gnew.add_argument (csizeof); + } + ccode.add_declaration (get_ccode_name (array_type), cvardecl); ccode.add_assignment (new CCodeIdentifier ("result"), gnew); diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index d3f4f416d..cc737edd8 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -3040,9 +3040,19 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { } else { ccode.add_declaration (get_ccode_name (value_type), new CCodeVariableDeclarator ("dup")); - var creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_new0")); - creation_call.add_argument (new CCodeConstant (get_ccode_name (value_type.type_symbol))); - creation_call.add_argument (new CCodeConstant ("1")); + CCodeFunctionCall creation_call; + if (context.profile == Profile.POSIX) { + cfile.add_include ("stdlib.h"); + creation_call = new CCodeFunctionCall (new CCodeIdentifier ("calloc")); + creation_call.add_argument (new CCodeConstant ("1")); + var csizeof = new CCodeFunctionCall (new CCodeIdentifier ("sizeof")); + csizeof.add_argument (new CCodeIdentifier (get_ccode_name (value_type.type_symbol))); + creation_call.add_argument (csizeof); + } else { + creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_new0")); + creation_call.add_argument (new CCodeIdentifier (get_ccode_name (value_type.type_symbol))); + creation_call.add_argument (new CCodeConstant ("1")); + } ccode.add_assignment (new CCodeIdentifier ("dup"), creation_call); var st = value_type.type_symbol as Struct;